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