如何使用Python同时捕获输出并显示它?

时间:2011-11-02 09:04:34

标签: python

我有一个很长时间运行的工作,运行几分钟然后重新启动。任务输出我捕获的各种信息:

output = subprocess.Popen(cmd,stdout=subprocess.PIPE).communicate()

问题是,我一次只能得到整个输出。我想显示输出,因为程序将它发送到stdout,同时仍然将其推回缓冲区(我需要检查输出是否存在某些字符串)。在Ruby中,我会这样做:

IO.popen(cmd) do |io|
  io.each_line do |line|
    puts line
    buffer << line
  end
end

3 个答案:

答案 0 :(得分:5)

您可以尝试这样的事情:

cmd = ["./my_program.sh"]
p = subprocess.Popen( cmd, shell=False, stdout=subprocess.PIPE)   # launch the process
while p.poll() is None:          # check if the process is still alive
    out = p.stdout.readline()    # if it is still alive, grab the output
    do_something_with(out)       # do what you want with it

答案 1 :(得分:3)

你可以一次读一行:

from subprocess import Popen, PIPE

p = Popen('grep -ir graph .', stdout=PIPE)
while not p.returncode:
    s = p.stdout.readline()
    print s
    p.poll()

通过这种方式,您只能阻止处理输出单行所需的时间。

答案 2 :(得分:-1)

您可以使用“tee”命令。它完全符合您的需求 http://www.computerhope.com/unix/utee.htm