7

cron内でシェルを開くため、cronジョブのsciptsがスクリプト自体の内部で実行するために必要な環境変数を保持する必要があることを詳述した複数の投稿と多くの記事を読みました。私の状況は、パス変数がすべて説明どおりに設定されているという点で独特です。これにより、 subprocess.call()を使用して pysaunter python 卵が正常に呼び出されますが、そこから壊れているようです。これにより、プロセス全体が cron ジョブで中断されます。

わかりやすくするために、ここで参照する手順を次に示します。

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 の出力は、egg を見つけて、pysaunter から必要なモジュールのロードを正常に開始したことを示していますが、pysaunter の変更に使用されるディレクトリを見つけようとすると中断します。エラーは次のとおりです。

ImportError: no module named helpers

このパスを環境に何度も追加しようとしましたが、helpers.py を含むディレクトリが見つからないようです。このコマンドpysaunter -m foo -vは、対話型シェルから呼び出すと正常に機能します。

私は pysaunter についてあまり助けを見つけることができなかったので、ここでは pysaunter の詳細が多すぎるのは不必要だと思います. ただし、pysaunter について詳しく知っている場合は、さらに情報が必要な場合はお知らせください。何を共有すればよいかわかりません。

また、.profile/.bash_profile を編集してシェルのデフォルトの動作を変更する機能について議論している多くの投稿も読みました。パス変数をグローバルにアクセスできるようにする場所を見つけようとしましたが、何も見つかりませんでした。これがどのように行われるのかわかりませんが、それで問題が解決する可能性があるので、それについて何か知っていることがあれば教えてください.

最後に、これは Mac 10.7.5 で実行されています。

4

2 に答える 2

1

あなたが言ったことは意味がありません。

あなたが言うshell_env = sys.pathsys.pathPython がモジュールを探すためのフォルダのリストであり、環境変数のマッピングではありません!

次に、それを で使用しsubprocess.callます。おそらくあなたは書くつもりenv=my_envでした。

それが次の問題です。まず、PATHで区切られたフォルダのリストである必要があります':'。最後のフォルダーに shell_path を追加するだけです。

最後に、python はPYTHONPATHリストとして使用して python モジュールを見つけます (これは、あなたが抱えている問題のようです)。

于 2013-07-11T04:50:10.320 に答える