サブプロセスPythonを実行しているのは、インポートエラーを取得します
-
28-10-2019 - |
質問
SubProcessからキックオフすることにより、PythonプログラムからPythonスクリプトを実行しようとしています(その理由は、メインプログラムがWX.Callafterとcolongの組み合わせでスクリプトが実行されたときに終了する必要があるためです)。ただし、スクリプトが実行されると、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は、スクリプトが住んでいるディレクトリです。
解決
Subprocessはos.exec*が非推奨されているため、誰かが提案したようにPopenの代わりにそれを使用することを提案しません。
凍ったプロセスから走るときにこの問題が発生するのを見てきました。その場合、新しいPythonプロセスの奇妙な環境を継承している可能性が最も高いです。
ほとんどの冷凍スクリプトはzipファイルから実行しようとしています。その場合、Pythonが何も見つからないのは不思議ではありません。すべてzipファイルに閉じ込められています:)
これが状況の場合は、Frozen Scriptを実行するために使用しているPython実行可能ファイルを使用して実行してみてください。特別な環境に対処できるはずです。
他のヒント
多分あなたは使用できます os.execv
ポペンの代わりに。
から OS/Pythonドキュメント:
これらの機能はすべて新しいプログラムを実行します。 現在のプロセスを置き換えます;彼らは戻りません。 UNIXでは、新しい実行可能ファイルが現在のプロセスにロードされ、発信者と同じプロセスIDがあります。エラーは、オセラーの例外として報告されます。
(強調 私の)