【悩み】
・Pythonスクリプトを毎日0時に実行したい!Windows上で実現するには?
・タスクスケジューラでPythonスクリプトを実行するための設定方法は?
・タスクスケジューラとPythonを組み合わせた活用事例を知りたい。
こういった「悩み」に答えます。
【本記事の内容】
① そもそもWindowsタスクスケジューラとは?
➁ 準備:タスクスケジューラで実行したいPythonスクリプトを作成
➂ Pythonスクリプトの定期実行に向けてタスクスケジューラを設定
④ よくある質問(FAQ)やトラブル事例
⑤ 活用事例
本記事に掲載した手順を実践したことで、Windows上で指定した時刻に作成したPythonスクリプトを自動実行できるようになりました(下の動画参照)。
記事の前半では「Windowsタスクスケジューラとは何か?」や「PythonスクリプトをWindowsタスクスケジューラで自動実行するまでの手順」を解説します。
記事の後半では、「WindowsタスクスケジューラとPythonスクリプトを組み合わせた際によくある質問やトラブル」や「タスクスケジューラとPythonの活用事例」を説明します。
この記事を読み終えることで、「作成したPythonスクリプトを毎日深夜0時に自動実行できる」状態になります。
そもそもWindowsタスクスケジューラとは?
Windowsのタスクスケジューラは、特定の時間やイベントに基づいてコンピューター上でプログラムやスクリプトを自動的に実行するためのツールです。
また、Windowsの標準機能として提供されているため、追加の料金なし、すなわち、無料でWindowsタスクスケジューラを利用できます。
Windowsタスクスケジューラは、Windowsが搭載されたパソコンでしか使えません。以下に、LinuxとMacOSの場合に使えるツールを記載します。
【Linuxの場合:Cronを使う】
LinuxのタスクスケジューラーはCronと呼ばれ、自動実行したい処理を定義するためにCronタブファイルを編集します。定義された処理は時間や日付、曜日に基づいて実行されます。
【MacOSの場合:Launchd】
macOSのタスクスケジューラーはLaunchdと呼ばれ、XML形式のプロパティリスト(plist)ファイルを使用して自動実行したい処理を定義します。Launchdは、システムの起動時やユーザーのログイン時などの特定のイベントに基づいて処理を自動実行できます。
ご紹介したWindowsタスクスケジューラ(以降、タスクスケジューラと記載)を使うことで、手動で定期的に実行している操作から解放され、時間を有意義に使えるようになります。
準備:タスクスケジューラで実行したいPythonスクリプトを作成
以下の手順に従いタスクスケジューラから実行したいPythonスクリプトを作成しましょう。
【流れ】
手順1:WindowsにPythonをインストール
手順2:タスクスケジューラから実行したいPythonスクリプトを作成
手順3:作成したPythonスクリプトを呼び出すバッチファイル(bat)を作成
手順4:作成したPythonスクリプトとバッチファイル(bat)の動作確認
WindowsにPythonをインストール
以下の記事の「手順1:Pythonのインストール」箇所を参照し、お使いのWindowsパソコンにPythonをインストールしましょう。
>> 【最短5分】PyAutoGUIをWindowsにインストールする手順
タスクスケジューラから実行したいPythonスクリプトを作成
続いて、タスクスケジューラから実行したいPythonスクリプトを作成します。今回は、タスクスケジューラから定期実行されたことが分かりやすいように「現在時刻を記載したファイルを作成するPythonスクリプト」を作りましょう。
上記のスクリプトのソースコードは、以下となります。以下をtest.pyのファイル名で保存してください。
import datetime
def create_timestamped_file(filename):
# 現在の日時を取得
current_time = datetime.datetime.now()
# ファイルを上書きモードで開く
with open(filename, 'w') as file:
# 現在の日時をファイルに書き込む
file.write(str(current_time))
# ファイル名を指定してファイルを作成
filename = "timestamp.txt"
create_timestamped_file(filename)
作成したPythonスクリプトを呼び出すバッチファイル(bat)を作成
続いて、Pythonスクリプトを呼び出すバッチファイル(拡張子が.bat)を作成します。
タスクスケジューラから直接Pythonスクリプトを呼び出すことは可能です。しかし、以下の理由より、本記事ではタスクスケジューラからバッチファイルを呼び出し、バッチファイル内でPythonスクリプトを呼び出す形式を採用します。
項目 | 詳細 |
環境の設定 | batファイルを使用することで、Pythonの実行環境を明示的に設定できます。たとえば、Pythonのバージョンや仮想環境の有効化などを含めることができます。 |
エラーハンドリング | batファイルを使用すると、Pythonスクリプトの実行に関連するエラーメッセージやログの管理が容易になります。実行に失敗した場合のエラー処理やログの出力を柔軟に行うことができます。 |
可読性と保守性 | batファイルを使用することで、タスクスケジューラーの設定に直接Pythonスクリプトのパスを記述するよりも、より明確で理解しやすい設定が可能です。また、batファイル内でPythonスクリプトを実行する方法を変更する場合にも、タスクスケジューラーの設定を変更せずにbatファイルを更新するだけで済みます。 |
柔軟性 | batファイル内で他の操作(ファイルの移動や削除、他のプログラムの実行など)を行うこともできます。これにより、Pythonスクリプトの実行と同時に他の処理を行う場合に便利です。 |
今回は、以下のバッチファイルを作成してください。作成したバッチファイルを「call-python-script.bat」というファイル名で保存しましょう。
rem Pythonスクリプトを呼び出すバッチファイルです。
rem カレントディレクトリへ移動
cd %~dp0
rem Pythonスクリプトを実行
python test.py
作成したPythonスクリプトとバッチファイル(bat)の動作確認
まずは、作成したPythonスクリプトが正常動作することを確認しましょう。そのために、以下のコマンドを実行します。
python test.py <enter>
dir <enter>
Volume in drive C is Windows
Volume Serial Number is 5C23-4FAA
Directory of C:\Users\user\Desktop\work\tmp\python\taskscheduler
2024/02/18 16:18 <DIR> .
2024/02/18 16:07 <DIR> ..
2024/02/18 16:14 179 call-python-script.bat
2024/02/18 16:15 444 test.py
2024/02/18 16:18 26 timestamp.txt
3 File(s) 649 bytes
2 Dir(s) 54,188,703,744 bytes free
上記コマンド実行後、「timestamp.txtが生成された」と「timestamp.txt内にコマンド実行した際の時刻が記載されている」場合、Pythonスクリプトを問題なく作成できたと判断できます。
次に、作成したバッチファイルが正常動作することを確認しましょう。そのために、作成したバッチファイルをダブルクリックします。
上記操作実施後、「timestamp.txtが生成された」と「timestamp.txt内に操作実施した際の時刻が記載されている」場合、バッチファイルを問題なく作成できたと判断できます。
以降で作成したPythonスクリプトをタスクスケジューラから実行する手順を図を用いながら解説します。
Pythonスクリプトの定期実行に向けてタスクスケジューラを設定
作成したPythonスクリプトをタスクスケジューラに登録し、定期実行させる手順に関して以下の順番で説明します。
【流れ】
手順1:タスクスケジューラの起動
手順2:新しいタスクの作成
手順3:タスク名の入力
手順4:トリガーの設定
手順5:操作で「プログラムの開始」を選択
手順6:タスクスケジューラで実行するスクリプトを選択
手順7:新しく作成したタスクの最終確認
手順8:タスクスケジューラで自動実行されたタスクの動作確認
タスクスケジューラの起動
まずは、タスクスケジューラを起動するために、「windowsマーク」と「rキー」を同時押ししてください。
その後、下図のように「Taskschd.msc」と入力し、「OKボタン」をクリックしましょう。
上記操作を実施することで、以下のようにタスクスケジューラが起動します。
新しいタスクの作成
次に、タスクスケジューラで実行したい処理を登録します。処理を登録する画面を開くために、下図の操作を実施しましょう。
操作後、下図のように「基本タスクの作成」画面が表示されます。
タスク名の入力
続いて、登録する処理の内容が後から分かるように「名前」と「説明」欄に情報を入力してください。
トリガーの設定
次に、下図のように登録する処理をどのタイミングで定期実行するかを設定します。今回は、「毎日」を選択する想定で進めていきます。
操作で「プログラムの開始」を選択
次に、どういった操作をタスクスケジューラで実行したいかを選択します。今回は、バッチファイル内に記載されたPythonスクリプトを定期実行したいため、「プログラムの開始」を選択してください(下図参照)。
タスクスケジューラで実行するスクリプトを選択
続いて、「プログラム/スクリプト」欄において、先ほど作成したバッチファイルを指定してください。その他の入力欄は、初期状態のまま設定不要です。
新しく作成したタスクの最終確認
次に、今まで設定してきた内容に問題がないかを確認しましょう。「完了」ボタンを押すことで、タスクスケジューラの設定が終了となります。
タスクスケジューラで自動実行されたタスクの動作確認
最後に、指定した時刻にPythonスクリプトが定期実行されていることを確認します。
フォルダ内にtimestamp.txtが作成され、そのファイル内に定期実行時刻付近の時刻が記載されている場合、正常にタスクスケジューラからPythonスクリプトを自動実行できたと判断できます。
以上の手順を実施することで、タスクスケジューラからPythonスクリプトを定期実行できるようになります。
次節で「タスクスケジューラに登録した情報を修正する方法」などのよくある質問(FAQ)やトラブル事例に関して解説します。
よくある質問(FAQ)やトラブル事例
タスクスケジューラを用いてPythonスクリプトを定期実行する際に様々な疑問があるかと思います。ここでは、以下の「よくある質問」や「発生しやすいトラブル」に対して解説します。
【ご紹介事項】
・タスクスケジューラに登録した設定情報を変更するには?
・タスクスケジューラに登録した定期実行を削除するには?
・タスクスケジューラの実行結果に(0x1)と表示される原因と解決方法は?
・タスクスケジューラに登録したファイルで日本語を使用すると異常終了
・タスクスケジューラに登録した「Pythonスクリプト」が実行されない
タスクスケジューラに登録した設定情報を変更するには?
5手順ほどで、タスクスケジューラに登録した定期実行の設定を変更できます。設定変更をしたい場合は、下図に記載した操作をタスクスケジューラ上で実施してください。
タスクスケジューラに登録した定期実行を削除するには?
わずか2手順で、タスクスケジューラに登録した定期実行を削除可能です。登録した定期実行を削除したい場合は、下図に記載した操作をタスクスケジューラ上で実施してください。
タスクスケジューラの実行結果に(0x1)と表示される原因と解決方法は?
タスクスケジューラの画面で「(0x1)」と表示される場合があります(下図参照)。
上記の「(0x1)」が表示される原因としては、以下が考えられます。
考えられる原因 | 詳細 |
登録したバッチファイルの終了コードが 0 以外の値を返した | タスクスケジューラに登録したバッチファイルが実行されたが、実行中にエラーで終了した場合に「(0x1)」が表示されます。 |
バッチファイル内で実行しているPythonスクリプト実行時にエラーが発生 | バッチファイル内で実行したPythonなどのスクリプト自体がエラーを発生させ、正常に完了しなかった場合にも、このエラーコードが表示されることがあります。 |
本事象を解消する方法を以下に記載します。
考えられる解消方法 | 詳細 |
バッチファイルやスクリプトのデバッグ | タスクスケジューラ経由で実行しているバッチファイルやスクリプトがエラーを返している可能性があります。その場合は、そのスクリプトなどを直接実行して、何が問題かを特定し修正してください。 |
必要な権限の付与 | スクリプトなどが必要な権限を持っていることを確認してください。例えば、ファイルやディレクトリにアクセスするために必要な権限が与えられているかどうかを確認しましょう。 |
スクリプトなどの構文をチェックする | スクリプトなどの構文にエラーがある場合、タスクスケジューラに登録した処理が失敗することがあります。構文エラーがないかどうかを見直しましょう。 |
タスクスケジューラに登録したファイルで日本語を使用すると異常終了
バッチファイルやPythonスクリプトのファイル内で日本語を記載した場合、たまにタスクスケジューラ経由からの起動に失敗することがあります。
原因としては、タスクスケジューラ経由で実行した際に、ファイル内で日本語の文字化けが発生してしまうためです。
ファイルのエンコードを「ANSI」に変更することで、本事象を解消することができます(下図参照)。
タスクスケジューラに登録した「Pythonスクリプト」が実行されない
タスクスケジューラに登録したPythonスクリプトが実行されない理由としては、以下が考えられます。また、それぞれの原因に対する対処方法も記載します。
原因 | 詳細 | 対処方法 |
Pythonのパスが正しくない | タスクスケジューラでPythonスクリプトを実行する場合、正しいPythonの実行可能ファイルのパスを指定する必要があります。Pythonのパスが間違っている場合、Pythonスクリプトは実行されません。 | タスクの設定でPythonの実行可能ファイルの正しいパスを指定してください。通常は、python.exe のフルパスを指定する必要があります。指定例:C:\Python39\python.exe |
Pythonスクリプトのパスが正しくない | タスクスケジューラで指定(またはバッチファイル内で指定)されたPythonスクリプトのパスが間違っている場合、Pythonスクリプトは実行されません。 | タスクの設定で正しいPythonスクリプトのパスを指定してください。スクリプトのフルパスまたは相対パスを使用します。指定例:C:\Scripts\myscript.py や .\myscript.py |
スクリプトの実行権限がない | タスクスケジューラで実行されるユーザーアカウントには、Pythonスクリプトを実行するための適切な権限が必要です。スクリプトが実行できるように適切な権限が与えられていない場合、Pythonスクリプトは実行されません。 | Pythonスクリプトが配置されているディレクトリと、スクリプトが参照するファイルやディレクトリに対する適切な実行権限を確認してください。必要に応じて、実行権限を付与してください。 |
スクリプト内でエラーが発生している | Pythonスクリプト自体にエラーがある場合、スクリプトは正常に実行されません。エラーがコンソールに表示されることもありますが、タスクスケジューラからはそれが見えない場合もあります。 | Pythonスクリプトを手動で実行してみてください。エラーがある場合は修正してください。 |
タスクスケジューラを利用する際の不安は解消されましたか?もし、上記以外の不安や心配事があれば本記事のコメントで教えていただければ、ご対応いたします。
活用事例
タスクスケジューラを利用することで、「毎日0時にあるスクリプトを自動実行」といったことが実現できます。
ここでは、活用事例として、以下の3つをご紹介させていただきます。
【活用事例】
・X(旧Twitter)のいいねなどの操作を定期実行
・Youtubeに動画を自動で定期アップロード
・Noteの有料記事の販売数を毎日深夜0時に自動集計
X(旧Twitter)のいいねなどの操作を定期実行
タスクスケジューラを使うことで、X(旧Twitter)の様々な操作を定期的に自動実施ができます。
例えば、「毎日17時に画像付きポストをする」や「ある単語を含むポストに対していいねやリポストを2時間おきに実施する」を実現できます。
X(旧Twitter)を自動化するPythonスクリプトの作り方に関しては、以下の記事を参照してください。
>> PythonでTwitterと連携する2つの方法を解説
Youtubeに動画を自動で定期アップロード
タスクスケジューラを使うことで、Youtubeの様々な操作を定期的に自動実施ができます。
例えば、「毎日8時または17時に動画の自動投稿」を実現できます。
Youtubeに動画をアップロードするPythonスクリプトの作り方に関しては、以下の記事を参照してください。
Noteの有料記事の販売数を毎日深夜0時に自動集計
タスクスケジューラを使うことで、データ集計を定期的に自動実施できます。
例えば、Noteの有料記事の販売数を毎日深夜0時に自動集計するといったことができます。
Noteの有料記事の販売数を集計するPythonスクリプトの作り方に関しては、以下の記事を参照してください。
>> Pythonを使いNoteの各記事の販売数を確認する方法
以上のようにタスクスケジューラを使うことで、手作業で行っていた様々なことを完全自動化することができます。こういった作業をタスクスケジューラ経由でできないかなど気になる点がありましたらコメントに記入していただければお答えします。
【まとめ】タスクスケジューラからPythonスクリプトの自動実行は可能!
いかがでしたでしょうか?
上記で紹介した方法を使うことで、タスクスケジューラからPythonスクリプトを定期実行できます。
最後にもう一度内容を確認しましょう。
【おさらい】
・タスクスケジューラを使うことでPythonスクリプトを定期実行可能
・タスクスケジューラでエラーが出た場合は呼び出し元に原因がある
・日々、手作業で行っていることを本組み合わせで完全自動化ができる
本ブログでは、「自動化やデータ分析によく使われるPythonの活用事例」や「業務の時短化に繋がるIT技術」などを発信しています。定期的に更新していますので、ぜひブックマークをよろしくお願いいたします。
コメント