2011-12-04 7 views
3

私はPythonプログラムからサブプロセスからキックオフしてPythonスクリプトを実行しようとしています(理由は、スクリプト実行時にメインプログラムが終了していなければならず、wx .CallAfterおよびClose)。しかし、スクリプトが実行されるとき、私はImportError: No module named osで1行目にエラーを表示します。これはPythonPathと何か関係があると思いますが、端末からスクリプトをうまく実行できます。サブプロセス実行時にインポートエラーが発生する

このように実行すると、スクリプトにコアモジュールが表示されないのはなぜですか?

編集: 問題の行は次のとおりです。

wx.CallAfter(subprocess.Popen,'python %s "%s" %s %s'%(os.path.join(BASE_DIR,"updatecopy.py"),BASE_DIR,pos[0],pos[1]),shell=True) 

BASE_DIRがちょうどたぶんあなたの代わりにpopenののos.execvを使用することができますに

+0

subprocess.Popen(...)を単に実行しているのと同じ問題がありますか? –

+0

'os'はほとんどのバージョンのpythonの組み込みモジュールです。それがインポートできないという事実は、おそらく通訳者が辞任しているという印です。その動作を示す完全なスクリプトの例を教えてください。 – SingleNegationElimination

答えて

1

サブプロセスがあります。

フリーズしたプロセスから実行すると、この問題が発生することがあります。そうであれば、新しいPythonプロセスのために奇妙な環境を継承する可能性が最も高いです。

ほとんど凍結されたスクリプトは、それがすべてのzipファイルの中に閉じ込めています、それはPythonが何かを見つけることができないというのも不思議ではありません、その場合、zipファイルから実行しようとしています:)

これは、その後の状況であればフリーズしたスクリプトを実行するために使用しているpython実行可能ファイルを使って実行してみてください。それは特別な環境に対処することができるはずです。

0

スクリプトが住んでいるディレクトリです。 os/python docsから

これらの関数は、現在のすべてのプロセスを交換する新しいプログラム、を実行します。彼らは戻ってこない。 Unixでは、新しい実行可能ファイルが現在のプロセスにロードされ、呼び出し元と同じプロセスIDを持ちます。エラーはOSError例外として報告されます。 os.execは*ので、私は誰かが示唆されているようにpopenの代わりにそれを使用することをお勧めしません推奨されなくなったため、

強調鉱山)

関連する問題