stderrが実際にコンソールに表示されているのか、それとも、提供した例を実行したときに生成される「blah」という名前のプロセスを生成するPythonの失敗に遭遇しただけなのかはわかりません...
OSError: [Errno 2] No such file or directory
この例の出力は、PATH に「blah」と呼ばれる実行可能スクリプトがない限り、期待される Python の です。
簡単なテストを行い、次のような bash スクリプトを作成しました。
#!/bin/bash
echo "This is stdout"
echo "This is a failure on stderr" >&2
exit 1
そのスクリプトに実行権限を与えた後、私はあなたの例を繰り返しましたが、代わりに私のスクリプト(ローカルディレクトリでfail.shという名前)を次のように呼び出しました:
import subprocess
cmd = './fail.sh'
proc = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc.communicate()
これは('This is stdout\n', 'This is a failure on stderr\n')
期待どおりに返されました。
したがって、おそらくここで実際に見ているのは、呼び出しようとしているプログラムが何であれ (それが問題ではない場合)、単に PATH に存在しないということです。
また、str
Python でラベルとして使用する場合の注意:str
は組み込み型であり、特に組み込み関数を「オーバーロード」したい場合を除き、変数または関数の名前として使用しないでください。string
クラスであるについても同様です。