こんにちは、Python サブプロセス モジュールについて質問があります
子プロセスとやり取りしたい(例:子の標準入力、標準出力)
これは子プログラムのコードです
1 #include <stdio.h>
2
3 int main(){
4 char buf[1024];
5 printf("asdfsadfasff\n");
6 scanf("%s",buf);
7 printf("%s\n",buf);
8 }
このコードは非常に単純で、文字列を出力し、入力を待機し、入力文字列を出力します
次に、Pythonコードは以下のとおりです
1 #!/usr/bin/python
2 from subprocess import *
3
4 fd = Popen(["./random"],stdin=PIPE,stdout=PIPE)
5 print "pid = %d"%(fd.pid) # print pid
6 result = ""
7 result = fd.stdout.read(-1) # read
8 print result
9 fd.stdin.write("write write write!!!\n")
10 result = fd.stdout.read(-1)
11 print result
この場合、このプログラムがうまく動作することを期待していましたが、7 行目 (fd.stdout.read(-1) がブロックされ、動作しませんでした)
読み取り関数のパラメーター (read(-1)、read(1)、read()、read(1024)) を変更しましたが、すべてが機能しません
しかし、最初に標準入力で文字列を指定すると、プログラムは機能しました。
プログラムが終了したときに、子供の標準出力バッファがいっぱいではなかったと思います...これは私の意見です
この問題に関する解決策はありますか?
編集1。最初に文字列を出力するプログラムを実行し、「sudo su」などのユーザーの入力を待つと、これは期待どおりに機能しました
このケースがうまく機能する理由がわかりません
1 from subprocess import *
2
3 fd = Popen(["sudo","su"],stdin=PIPE,stdout=PIPE)
4
5 print fd.stdout.read(-1)
6 print fd.stdin.write("asdfasdfas\n")