2

mutilpleサブプロセス呼び出しを連続して使用するのに問題があります。

これら2つは正常に機能します。

subprocess.call(["gmake", "boot-tilera"], cwd="/home/ecorbett/trn_fp")
p = subprocess.Popen(["gmake", "run-tilera"], stdout=subprocess.PIPE, cwd="/home/ecorbett/trn_fp")

ただし、次の直後にこの呼び出しを実行しようとすると、エラーが発生します。

time.sleep(10)
subprocess.call(["./go2.sh"], cwd="/home/ecorbett/trn_fp/kem_ut")

「./go2.sh」プログラムを実行する前に数秒かかるため、そこにスリープを追加しました。それが問題かどうかわからない。

何かアドバイス?

4

1 に答える 1

2

シェルスクリプトがコマンドラインで機能している理由として考えられるのは、シバン行が正しく記述されていない(またはまったく記述されていない)ことです。スクリプトがコマンドラインから機能するが、Pythonサブプロセスとしては機能しない例を参照してください。これは、Python内でシェルスクリプトを実行する正しい方法ですか?

シェルスクリプトにシバン行が指定されていない場合は、環境に$ SHELLが設定されており、スクリプトがそれをデフォルトとして使用しているため、コマンドラインから機能します。Pythonサブプロセスから実行する場合、Pythonはそれが何であるかを認識せず、で失敗しOSError: [Errno 8] Exec format errorます。はバイナリプログラムであり、シェルスクリプトではないため、機能subprocess.call()しました。gmake引数shell=Trueを使用すると、シェルの場合とまったく同じように引数を解釈するように指示されました。

ただし、場合によっては安全でない可能性があるため、での使用shell=Trueには注意してください。Pythonドキュメントをサブプロセスします。subprocess.call()

于 2012-07-26T23:25:45.520 に答える