1

matplotlib を使用してプロット png を保存する crontab で python スクリプトを実行しようとしています。スクリプトは、正常に実行された場合、またはcronによって実行されなかった場合に正常に実行されます。

私のcrontabファイルは次のとおりです。

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
* * * * * /home/matthew/Programs/random_walk/random_walk.py >/dev/null 2>&1

アクセス許可は正しく設定されているようで、pythonpath は正しいようです。random_walk.py出力を含むファイルを書き込む行をいくつか追加しましたが、sys.pathこれは cron で実行したときに機能しました。

いくつかのブログ投稿とメーリング リストは、

import matplotlib
matplotlib.use('Agg')

私のpythonファイルの上部(シバンの後)にありますが、それは役に立ちません。

私のsavefigコードは

if len(sys.argv) > 1:
    save_path = sys.argv[1].rstrip('/')+'/random_walk.png'
else:
    save_path = 'random_walk.png'
plt.savefig(save_path)

cron と matplotlib をうまく連携させるにはどうすればよいですか?

4

1 に答える 1

2

@tcaswell のおかげで、問題がパスの問題であることがわかりました。

私のcrontabファイルは画像ファイルの場所をrandom_walk.pyに渡していなかったので、画像は私のcrontabファイルと同じディレクトリに保存されていました-私が期待していたrandom_walk.pyと同じディレクトリではありませんでした。

解決策 1

私が意図したように、crontab でスクリプトへのパスを渡します。

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
* * * * * /home/matthew/Programs/random_walk/random_walk.py /home/matthew/Programs/random_walk >/dev/null 2>&1

解決策 2

別の方法として、Python スクリプトが常に出力ファイルを希望する場所に書き込むようにすることもできます。この場合、出力ファイルを random_walk.py と同じディレクトリに配置する必要があるため、次のコードを使用しています。

save_path = ''
if len(sys.argv) > 1:
    save_path = sys.argv[1].rstrip('/')+'/random_walk.png'
else:
    save_path = os.path.dirname(os.path.realpath(__file__))+'/random_walk.png'
plt.savefig(save_path)

ノート

明確にするために、

import matplotlib
matplotlib.use('Agg')

matplotlib を cron で動作させるためにも必要でした。

于 2013-05-18T20:05:26.300 に答える