【问题标题】:How to read stdout output of ongoing process in Python?如何在 Python 中读取正在进行的进程的标准输出输出?
【发布时间】:2012-06-01 17:56:23
【问题描述】:

您好,我是 Python 编程语言的新手,在编写一个脚本时遇到了问题。我想保存当我在 Python 脚本的变量中运行 tcpdump 命令时获得的 stdout 输出,但我希望 tpcdump 命令连续运行,因为我想从所有传输的数据包中收集长度,这些数据包被 tcpdump 过滤(使用我写的过滤器)。 我试过了:

    fin, fout = os.popen4(comand)
    result = fout.read()
    return result

但它只是挂起。

【问题讨论】:

    标签: python process stdout tcpdump


    【解决方案1】:

    我猜它挂起是因为os.popen4 在子进程退出之前不会返回。你应该改用subprocess.Popen

    import subprocess
    import shlex  #just so you don't need break "comand" into a list yourself ;)
    
    p=subprocess.Popen(shlex.split(comand),stdout=subprocess.PIPE)
    first_line_of_output=p.stdout.readline()
    second_line_of_output=p.stdout.readline()
    ...
    

    【讨论】:

    • 谢谢。那行得通。起初我从命令行尝试,它似乎没有工作,但是当我写一个脚本时它做到了。也感谢您的及时:)
    猜你喜欢
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2021-03-16
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多