4

サブプロセスから開始することにより、PythonプログラムからPythonスクリプトを実行しようとしています(理由は、スクリプトの実行時にwx.CallAfterとCloseの組み合わせでメインプログラムを終了する必要があるためです)。ただし、スクリプトを実行すると、1行目にエラーが発生ImportError: No module named osし、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 は、スクリプトが存在するディレクトリです。

4

2 に答える 2

1

subprocess は os.exec* が非推奨になったため存在するため、誰かが提案したように Popen の代わりにそれを使用することはお勧めしません。

フリーズしたプロセスから実行すると、この問題が発生するのを見てきました。その場合は、新しい python プロセスの奇妙な環境を継承している可能性があります。

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

このような状況の場合は、凍結したスクリプトを実行するために使用している python 実行可能ファイルを使用して実行してみてください。特殊な環境にも対応できなければなりません。

于 2011-12-19T11:17:48.310 に答える
0

os.execvたぶん、Popen の代わりに使用できます。

os/python docsから:

これらの関数はすべて新しいプログラムを実行し、現在のプロセスを置き換えます。彼らは戻りません。Unix では、新しい実行可能ファイルが現在のプロセスにロードされ、呼び出し元と同じプロセス ID を持ちます。エラーは OSError 例外として報告されます。

強調鉱山)

于 2011-12-04T21:29:05.370 に答える