【发布时间】:2018-12-15 20:25:33
【问题描述】:
我使用 subprocess.Popen(['myapp'], stdin=PIPE, stdout=PIPE, stderr=PIPE, bufsize=0) 创建了一个子进程,它执行一个 C 程序,该程序使用例如写入 stdout puts().
问题是 Python 程序在 p.stdout.read(1024) 中阻塞,尽管子进程从 puts("HelloWorld") 开始。只有在子进程终止后,p.stdout 上的输出才可用。我认为bufsize=0 将意味着管道变得无缓冲,因此输出立即在管道上可用。
我已阅读以下问题,其中指出换行符应导致刷新输出。但是,puts() 打印了一个换行符,所以管道不被识别为交互式设备吗?
Difference between puts() and printf() in C while using sleep()
这是因为 puts 也在输出一个换行符,在 可以确定为交互的设备,通过 默认(用于标准输出)(a)。
有什么想法吗?
【问题讨论】:
-
您是否尝试过在 C 程序中的每个
puts之后进行刷新?
标签: python python-3.x subprocess