如何捕获子进程的stdout输出?

Tyl*_*ler 10 python subprocess stdout

我正在尝试用Python编写程序,并且我被告知要运行.exe文件.当运行此.exe文件时,它会吐出大量数据,我需要在屏幕上打印一行.我很确定我需要使用subprocess.popen或类似的东西,但我是subprocess的新手并且没有任何线索.任何人都有一个简单的方法来完成这项工作?

Nad*_*mli 25

如果您对过程执行完毕后打印输出感兴趣,@ Paolo的解决方案是完美的.如果你想在进程运行时轮询输出,你必须这样做:

process = subprocess.Popen(cmd, stdout=subprocess.PIPE)

while True:
    out = process.stdout.readline(1)
    if out == '' and process.poll() != None:
        break
    if out.startswith('myline'):
        sys.stdout.write(out)
        sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)


Pao*_*ino 19

像这样的东西:

import subprocess
process = subprocess.Popen(["yourcommand"], stdout=subprocess.PIPE)
result = process.communicate()[0]
Run Code Online (Sandbox Code Playgroud)

  • [0]表示返回元组的第一个元素(stdout,stderr); 你可以根据自己的喜好处理结果,这将是一个字符串,例如找到一个特定的行."yourcommand"是你的完整命令,如果命令不是*在路径上*(至少在*nix上),最终是命令的完整路径. (3认同)