如何使用行缓冲立即读取子进程?

How to read subprocess immediatly using row buffering?

提问人:Auncel 提问时间:10/7/2023 更新时间:10/7/2023 访问量:9

问:

我尝试从 获取输出,但出了点问题a.exe

a = subprocess.Popen('a.exe', stdout=subprocess.PIPE, universal_newlines=True,
                     bufsize=1, encoding='ASCII')
output = a.stdout.readline()
// a.exe
printf("output\n");
...
scanf("%s",input);

我发现停止,但即使我设置了也没有输出任何东西,我怎样才能立即获得输出? (在 Windows 中)a.exescanfuniversal_newlines=Truebufsize=1

Python IO

评论

0赞 Barmar 10/7/2023
您需要更改 C 程序以不缓冲其输出。用于关闭缓冲,或将每个 .setvbuf()fflush(stdout)printf()
0赞 Barmar 10/7/2023
但是,如果您想控制交互式程序,请结帐而不是 .它使用 pty 来解决缓冲问题。pexpectsubprocess
0赞 Auncel 10/7/2023
@Barmar 谢谢!最好改用 pexpect。我一路被困在子进程陷阱中。

答: 暂无答案