【问题标题】:Get subprocess module to launch shell window获取子进程模块以启动 shell 窗口
【发布时间】:2017-05-28 07:14:40
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: python shell subprocess


【解决方案1】:

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

缺少实时输出是Popen.communicate()stdout=subprocess.PIPE 结合使用的结果。输出缓冲在内存中,直到子进程完成。那是因为.communicate() 将输出返回给您,而在方法调用返回之前您不会得到它。

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

【讨论】:

  • 那么我应该使用什么结束命令来达到预期的结果?
  • @user32882:我无法回答这个问题,因为我不知道想要的结果是什么。 Popen.communicate() 等待子进程完成。因此,如果您想在此之前查看输出,请不要通过管道输出。你做什么取决于你想要什么。您可以将命令更改为"program 2phase_eff" > myfile.txt,而不是设置stdout。你要求调整。真的没有。
猜你喜欢
  • 2011-10-30
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多