を呼び出すのcrontabで実行していない私は、cronジョブでsciptsが原因のcron内殻の開口部に、スクリプト自体の内部で実行するために必要な環境変数を維持する必要があることを詳述複数の投稿と多くの記事を読みました。私の状況は、私のパス変数がすべて説明されているように設定されているという点で独特で、subprocess.call()を使ってPythonの卵を呼び出すことに成功しますが、そこから崩壊するようです。これにより、プロセス全体がcronジョブで中断されます。のPythonスクリプトpysaunter
は明確にするために、ここで私はを参照してください。手順は次のとおりです。
1) cronjob calls run_test.py -n foo
2) run_test.py sets the environment variables correctly
(cur_shell_path=sys.path (converted to proper path string, not shown here)
my_env= os.environ.copy()
my_env["PATH"] = my_env["PATH"] + cur_shell_path)
3) run_test.py calls subprocess.call("pysaunter -m foo -v", env=my_env, shell=True)
ステップ3の出力は、それが卵を見つけることに成功しpysaunterから必要なモジュールをロードするために開始しますが、それは時に壊れていることを示している
pysaunterを変更するためのディレクトリを探しようとしています。エラーが表示されます:
ImportError: no module named helpers
このパスを環境に複数回追加しようとしましたが、helpers.pyを含むディレクトリが見つからないようです。コマンドpysaunter -m foo -v
は、対話型シェルから呼び出されたときに正常に動作します。
私はpysaunterに多くの助けを見つけることができなかったので、私はあまりpysaunterの詳細はここでは不必要なことであろうと想定しています。ピサウンタについてもっと知っていれば、もっと情報が必要な場合は教えてください。私は何を共有するか分からない。
私はまたの.profile/.bash_profileのを編集することで、シェルのデフォルトの動作を変更する機能を議論する多くの記事を読みました。パス変数をグローバルにアクセス可能にする場所を見つけようとしましたが、何も見つかりませんでした。私はこれがどのように行われているのか分からず、問題を解決するかもしれないので、それについて何か知っていれば教えてください。
最終的に、これはMac 10.7.5で動作しています。
私の問題を指摘していただきありがとうございます。私は今、my_envが渡されていることを示すために修正しました。また、Unixベースのマシンでは、コロン(:)を使用してパス値を区切るため、問題になることはありません。最後に、Pythonpathはローカルディレクトリを検索するために使われます。ローカルディレクトリは、Unixではシェルがどこから起動されたかによって定義されます(http://docs.python.org/release/1.5.1p1/tut/searchPath.html)。 cronジョブは、正しいディレクトリから起動されず、.profileまたは.bash_profileを読み込まない非対話型シェルを呼び出すので、パスは追加されないため、Pythonpathは設定されません。 – derigible
あなたはコロンについて正しいです。私はそれを修正した。 cronジョブでPYTHONPATHを設定する必要があります。 PYTHONPATHを目的のディレクトリに設定し、Pythonスクリプトを呼び出すラッパースクリプトを作成することができます。 – korylprince