获取子进程模块以启动shell窗口

时间:2017-05-28 07:14:40

标签: python shell subprocess

我有一个名为program的编译程序,它接受一个名为2phase_eff的参数。我想从python运行这个程序,但也能够在shell上实时查看它的进度(它输出各种进度消息)。到目前为止,我已成功运行它并在使用以下代码完成运行后查看输出:

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

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

  1. 我看不到cmd shell和
  2. 输出不是实时的
  3. 如何调整上述命令以实现上述两个目标?感谢。

1 个答案:

答案 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_HIDEPopen.communicate()结合使用的结果。输出缓冲在内存中,直到子进程完成。这是因为stdout=subprocess.PIPE会向您返回输出,并且在方法调用返回之前您不会得到它。

你可以尝试传递一个文件描述符,然后轮询它。