【问题标题】:Capturing stdout of subprocess realtime in python? [duplicate]在python中实时捕获子进程的标准输出? [复制]
【发布时间】:2016-02-15 23:25:22
【问题描述】:

我想运行我的命令并实时捕获标准输出:

import subprocess
import shlex
cmd='my command'
args=shlex.split(cmd)    
com=subprocess.Popen(args,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
com.stdout.flush()
for line in com.stdout.read()
    print line

但是没有任何输出...

【问题讨论】:

标签: python subprocess real-time stdout


【解决方案1】:

【讨论】:

    【解决方案2】:

    任何连接到文件描述符的对象都可以传递给subprocess.Popen,包括sys.stdout

    com=subprocess.Popen(args,stdout=sys.stdout,stderr=sys.stderr)
    

    请注意,这在某些 python shell 中可能不起作用。

    【讨论】:

    • 错误:IndexError:列表索引超出范围@ppperry
    • 这个错误在我的回答中没有任何意义,它不会做任何类型的列表索引。请显示完整的回溯
    • 这是输出:` tcpdump=subprocess.Popen(args,stdout=sys.stdout,stderr=sys.stderr) 文件“/usr/lib/python2.7/subprocess.py”,行710,在 init errread, errwrite) 文件“/usr/lib/python2.7/subprocess.py”,第 1206 行,在 _execute_child 可执行文件 = args[0] `
    • 您将一个空列表传递给subprocess.Popen 构造函数。这与输出重定向无关。
    • 没有必要使用stdout=sys.stdout。默认情况下,标准输出是继承的,即,如果您不传递 stdout 参数,则子进程将打印到与父 Python 脚本相同的位置(除非 sys.stdout 被错误地替换)。
    猜你喜欢
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2021-01-29
    • 1970-01-01
    • 2016-07-26
    • 2016-12-01
    • 2010-10-29
    相关资源
    最近更新 更多