Python 開発

タスクスケジューラからpythonを実行すると(0x1)のエラーで失敗する理由とは

2019-01-24

Share this for your friends.

タスクスケジューラからpythonを実行すると(0x1)のエラーで失敗する理由とは

ある処理を毎日同じ時間に実行したい。

このような要望の為にWindowsに用意されているのがタスクスケジューラ
しかしこのタスクスケジューラからPythonのプログラムを実行しようとすると、実行結果が (0x1) というエラーになってしまう。
そこで今回はエラーにならない実行方法を共有する。


(0x1)エラーって何?

(0x1) はファイルやプログラムが見つからない時に発生するエラー。
「お客様が指定されたプログラムを実行しようとしましたが、そもそも見つけられませんでした。」
というもの。

大体のユーザーは手動で実行確認したものを自動化したくてタスクスケジューラを設定しているのに、「見つけられませんでした」では憤慨モノである。

0x1: 該当するデータが存在しません。
タスクの設定手順


何故エラーになるの?

下の例のような空白を含むパス、他にも括弧を含むパスがあるとWindowsは認識できずにエラーになってしまう模様。
引数の指定についても同様。

C:\Program Files\Python36\python.exe

参考
* Windows10におけるタスク実行が0x1でエラーとなる - マイクロソフト コミュニティ
* Scheduled Task Error 0x1
* タスク スケジューラ で、空白を含む引数を指定すると (0x1) で終了してしまいます (CmdletBindingを使用した場合)


解決方法は?

3通りの対処方法がある。

プログラムやファイルのパスを見直す

原因に対する正当な対処方法。
空白や括弧を含むパスや引数が無いかを調べてダブルクオートやシングルクオートで囲っていく。
なかなか地道な作業な上に1つでも見落とすと解決しないのが辛い。


バッチファイルから実行する

Python等の実行コマンドをバッチ(.bat)ファイルに記述して、タスクスケジューラからはバッチファイルを起動する。

プログラムの引数もバッチの中に書いてしまうので、手動実行で動作する事を確認すればあとはタスクスケジューラにバッチファイルを登録するだけで良いので楽。

バッチファイルには以下のように書く。

REM バッチファイルのディレクトリに移動
cd %~d0%~p0

python hoge.py > %fname%


Windows使うのをやめる

プログラムの自動実行とかサーバー的な使い方をするなら、そもそも Wondows ではなく Linux を使う方が良い。
Linuxを使えばタスクスケジューラのようなものに悩まされなくて済む。


まとめ

  • (0x1)が発生するのはファイルやプログラムが見つからないから
  • プログラムが見つからないのはパスや引数に空白や括弧が含まれてるから
  • 解決するにはパスを見直すバッチ化するWindows使うのをやめる



Share this for your friends.

ITipsと同じようなブログを作る方法

ブログに興味がありますか?

もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

ランキング参加中

にほんブログ村 IT技術ブログへ

他にもブログやSNSで紹介してくれると励みになります。

はてブのコメントで酷評されると泣きます(´;ω;`)

-Python, 開発
-,

© 2024 ITips