2017-03-29 11 views
0

PYTHONPATHを含むすべての必要な環境を設定するtcshシェルスクリプトがあります。このスクリプトは、最後に実行可能ファイルを実行します。私はまた、シェルスクリプトに入力として送られるpythonスクリプトを持っています。それはターミナルから実行されたときに、次は完全に正常に動作します:サブプロセスはすべての環境変数を保持していません

path to shell scriptpath to python script

私はサブプロセスから同じことをしたいときさて、問題が発生します。 Pythonスクリプトは、シェルスクリプトを介して既に設定されているはずのモジュールの多くを見つけることができないため、実行されません。そして明らかに、PYTHONPATHは、サブプロセスが実行された親環境やシェルスクリプト自体に比べて多くの欠落したパスを持っています。サブプロセスは、シェルスクリプトが設定する環境を尊重しないようです。

私はすでにあらゆることを試しましたが、助けてくれませんでした!

cmd = [shell_script_path, py_script_path] process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=os.environ.copy()) envが指定されていない場合でも違いはありません!

これを修正する方法はありますか?

+0

Popenを呼び出すPythonスクリプトを起動する前に 'export PYTHONPATH'を試しましたか?これにより、子プロセスはその変数を継承します。 –

+0

Popenが実行している環境には、すでにすべてのパスが含まれています!あるいは、シェルからPYTHONPATHをエクスポートすることを意味しましたか?シェルスクリプトは環境自体を設定します。 – Yasin

+0

私が何をしても、私はImportErrorsを取得し続けています。この 'import site'のようなエラーは失敗しました。トレースバック用に-vを使用する – Yasin

答えて

0

サブプロセスがすべての親プロセス環境を継承し、それらが同じ環境下で実行されていると想定され、シェルスクリプトが環境を設定しないようにして、それを修正しました。

これは、環境が保持されている問題を解決しますが、問題はプロセスがハングするだけです。 (シェルから直接実行されたときには発生しません)

関連する問題