我有一个c程序,其中stdin作为输入,stderr作为输出,我想在它仍在运行时获取它的输出,但是它始终是块,我该怎么办?
这是python代码
i = 0
popen1 = subprocess.Popen(['./hello1'], stdin=subprocess.PIPE,
stderr=subprocess.PIPE, universal_newlines=True)
while i < 30:
if popen1.poll() is None:
popen1.stdin.write("ada\n")
print("write line......")
#print(popen1.stderr)
for stderr_line in popen1.stderr:
print(stderr_line, end="")
sys.stderr.flush()
i += 1
这是c代码:
int main(int argc, char *argv[]){
int i = 0;
char str[20];
while(i < 30){
scanf("%s", str);
fprintf(stderr, "%s\n", str);
fprintf(stderr, "%s\n", argv[0]);
i++;
}
//while(1);
}
准确的结果是
write line......
<_io.TextIOWrapper name=5 encoding='UTF-8'>
然后阻止
答案 0 :(得分:0)
当前,您正在打印对stderr
的引用。另外,您正在刷新sys.stderr
,但是在打印到sys.stdout
时,那里没有数据。
我将for
循环更改为:
for stderr_line in popen1.stderr.read():
print(stderr_line, end='', flush=True)