我試圖運行下面的代碼作爲子Python的子模塊:父子溝通不工作
#include<stdio.h>
int main()
{
int a;
printf("Hello\n");
fprintf(stderr, "Hey\n");
scanf("%d", &a);
printf("%d\n", a);
return 0;
}
該腳本正常工作:寫標準輸入,從標準輸出和標準錯誤,從讀取。
#!/usr/bin/python
import subprocess
p1=subprocess.Popen("/mnt/test/a.out", stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
p1.stdin.write('1\n')
print p1.stdout.readline()
print p1.stderr.readline()
print p1.stdout.readline()
但這個腳本無法讀取標準輸出的任何輸出和被封鎖那裏,即使C程序可以打印任何苛刻的輸入之前到標準輸出。爲什麼我無法從stdout中讀取任何內容?
#!/usr/bin/python
import subprocess
p1=subprocess.Popen("/mnt/test/a.out", stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
print p1.stdout.readline()
p1.stdin.write('1\n')
print p1.stderr.readline()
print p1.stdout.readline()
我不認爲他需要'溝通()' - 因爲「等待進程終止」。這就是爲什麼 - 我認爲 - p.wait()在代碼中是多餘的,因爲它做同樣的事情,本質上。 – phant0m