我有一个称为 program
的编译程序,该程序称为1个称为 2phase_eff
的参数。我想从Python运行此程序,但也能够实时查看其进度(它输出各种进度消息(。到目前为止
import subprocess
subprocess.Popen("program 2phase_eff", stdout=subprocess.PIPE, shell=True).communicate()
是的,这确实在最后输出了所有中间内容,但是有两个问题
- 我看不到
cmd
壳和 - 输出不是实时的
如何调整上述命令以实现两个目标?谢谢。
要显示命令壳,您需要将creationflags
的值传递给subprocess.Popen()
。在Windows中,这是ShellExecute()
的nShowCmd
参数。这是0
和10
之间的整数。Popen()
的默认值为零,对应于SW_HIDE
。您可以在https://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx.aspx。
缺乏实时输出是将Popen.communicate()
与stdout=subprocess.PIPE
结合使用的结果。输出在内存中进行缓冲,直到子进程完成为止。这是因为.communicate()
返回您的输出,并且您在方法调用返回之前才能得到。
您可以尝试将其传递给文件描述符,然后进行轮询。