我想在子进程仍在运行时获取它的输出,但是它始终是块

时间:2019-01-15 07:30:49

标签: python-3.x subprocess

我有一个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'>

然后阻止

1 个答案:

答案 0 :(得分:0)

当前,您正在打印对stderr的引用。另外,您正在刷新sys.stderr,但是在打印到sys.stdout时,那里没有数据。

我将for循环更改为:

for stderr_line in popen1.stderr.read():
    print(stderr_line, end='', flush=True)