実際にコンソールに出力するには、subprocess.PIPE
をstdout/stderrに使用しないでください。デフォルトでは、呼び出されるプロセスはPythonプロセスのstdout/stderrハンドルを使用します。
subprocess.check_call(command.split())
しかし、あなたはあなたのスクリプトで使用するためのmakeの出力をキャプチャする必要がある場合、あなたは:と呼ばれるプロセスは、ゼロ以外の終了コードを返す場合、その場合、あなたはsubprocess.CalledProcessError
を高めるためにsubprocess.check_call()
機能を使用することができますこれは単一の値にstdoutとstderr出力を組み合わせること
try:
output = subprocess.check_output(command.split(), stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
output = e.output
# error handling here
注:類似subprocess.check_output()
関数を使用することができます。あなたがそれらを個別に必要な場合は、.communicate()
方法と併せてsubprocess.Popen
コンストラクタを使用する必要がありますし、手動でPopen
オブジェクトのreturncode
属性をチェックします:
p = subprocess.Popen(command.split(), stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out, err = p.communicate()
if p.returncode != 0:
# raise exception or other error handling here
を、それが失敗したとき、あなたは何(のpython関連)エラーが出るのですか? –
最も簡単な方法は、可能であれば、Python 3.4を使用し、 'subprocess.popen()'の呼び出しを 'subprocess.run()'に置き換えることです。これは、stdoutとstderrの戻りコードと結果を文字列のリストとして含むオブジェクトを返します。 –
@Tom Dalton実際に問題はそれだけであり、例外をスローしないということです。スクリプトの後半では、makeコマンドの受け渡しに依存します。ここでスクリプトが失敗します。 – homeGrown