この質問はpython subprocess.Popen - write to stderrと同じです。しかし正解はありません。Pythonのサブプロセス 'stderrに書き込むにはどうすればいいですか?
私はこれが正しいことを知っています。
import sys
sys.stderr.write('abcd')
ここに、サブプロセス(名前付き入力)のコードがあります。そして、私は子プロセス(入力)が親プロセスによって書かれた文字列を出力するようにします。
int main(int argc, char* argv[], char* envp[]){
char buf[5];
read(2, buf, 4);
buf[4]=0;
printf("%s\n", buf);
}
私はPythonのサブプロセス 'stderrに書きたいと思います。しかし、これは正しくありません。 (たぶん、あなたはこれを修正することができますか、私だけ別の の方法をご紹介します。)
from subprocess import *
p = Popen(['./input'],stderr=PIPE)
p.stderr.write('abcd')
私はこのようなエラーが発生しました。
IOError: File not open for writing
ありがとうございました。
これを成功させると、「abcd」はどこに表示されますか?パイプの一端はサブプロセスに接続され、もう一方は親プロセスに接続されているため、端末には表示されません。理論的には、それはサブプロセスに出現する可能性がありますが、読み込み*ではなく、標準エラー出力にのみ書き込まれます。あなたは何をしたいですか? –
サブプロセスはstderrに書き込みます。それをパイプにすることによって、親からそれを読み取るように設定します。サブプロセスがstderrに書き込むようにするには、そのexecプロセスが実行する必要があります。そのエラーメッセージを親プロセスのstderrに送る場合は、何もしないでください。子プロセスは親プロセスのstderrを自身のプロセスとして継承します。 –
stderrは、通常、そのようなサブプロセスを開くと読み取り専用ストリームとして開きます。もちろん、そのエラーが発生しています。あなたは実際何をやろうとしているのですか?この場合、より詳細で具体的な背景が実際に役立つかもしれません。 –