【发布时间】:2009-10-05 21:37:32
【问题描述】:
可能重复:
Bypassing buffering of subprocess output with popen in C or Python
我正在围绕应该无限期运行的服务器 cmd 行脚本构建一个包装器。 我需要做的是在不等待子进程完成的情况下获取当前的 stout。
我的意思是,如果我运行以下命令,一切正常:
ls = Popen(["ls"], stdout=PIPE)
output = ls.stdout.read()
但如果我对无限期运行的程序做同样的事情:
server = Popen(["python","-m","SimpleHTTPServer"], stdout=PIPE)
output = server.stdout.read()
它不会回来...
更新:偶数
output = server.stdout.read(1)
挂起...
您知道是否有办法以独立于操作系统的方式从 Popen(或类似的线程实现)捕获部分输出?
【问题讨论】:
-
查看解决方案here
-
这是跨平台的吗? (看起来不像)
-
那里有基本问题的描述和几个解决方案。如果您可以修改正在运行的进程以进行刷新,那是最好的。如果你不能,Alex 概述了 pexpect/wexpect 技巧,它应该涵盖 Unix-y 和 Windows 平台。如果这些不起作用并且您无法更改子进程写入/刷新到 stdout 和 stderr 的方式,那么您很可能不走运。
-
@Santi: 已确认 -- pexpect 所有 Unix 变体公司。 Mac,我们希望在 Windows 上运行(如果您在其他任何平台上运行,则可能有也可能没有其他特殊平台的解决方案)。
-
好吧,我会检查一下,看看我是否幸运 :) 两个都感谢。
标签: python subprocess