获取子进程模块启动Shell窗口



我有一个称为 program的编译程序,该程序称为1个称为 2phase_eff的参数。我想从Python运行此程序,但也能够实时查看其进度(它输出各种进度消息(。到目前为止

import subprocess
subprocess.Popen("program 2phase_eff", stdout=subprocess.PIPE, shell=True).communicate() 

是的,这确实在最后输出了所有中间内容,但是有两个问题

  1. 我看不到cmd壳和
  2. 输出不是实时的

如何调整上述命令以实现两个目标?谢谢。

要显示命令壳,您需要将creationflags的值传递给subprocess.Popen()。在Windows中,这是ShellExecute()nShowCmd参数。这是010之间的整数。Popen()的默认值为零,对应于SW_HIDE。您可以在https://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx.aspx。

找到可用值的完整列表。

缺乏实时输出是将Popen.communicate()stdout=subprocess.PIPE结合使用的结果。输出在内存中进行缓冲,直到子进程完成为止。这是因为.communicate()返回您的输出,并且您在方法调用返回之前才能得到。

您可以尝试将其传递给文件描述符,然后进行轮询。

最新更新