将子流程输出保存在变量中

时间:2018-09-20 10:54:55

标签: python subprocess

我正在使用fping程序来获取主机列表的网络延迟。它是一个Shell程序,但是想在我的python脚本中使用它,并将输出保存在某个数据库中。

我正在这样使用subprocess.call()

import subprocess
subprocess.call(["fping","-l","google.com"])

此问题是由-l标志指示的给定无限循环,因此它将继续将输入打印到控制台。但是在每个输出之后,我需要某种回调,以便可以将其保存在数据库中。我怎样才能做到这一点: 我寻找了subprocess.check_output()  但它不起作用。

1 个答案:

答案 0 :(得分:1)

这可以帮助您:

def execute(cmd):
    popen = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE,
                             universal_newlines=True)
    for stdout_line in iter(popen.stdout.readline, ""):
         yield stdout_line
    popen.stdout.close()
    return_code = popen.wait()
    if return_code:
        raise subprocess.CalledProcessError(return_code, cmd)

因此您基本上可以执行:

for line in execute("fping -l google.com"):
    print(line)

例如。