在variab中保存子流程输出

2024-06-16 06:11:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我是这样使用subprocess.call()

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

问题在于它是一个无限循环,由-l标志指示,因此它将继续向控制台打印输入。但是在每次输出之后,我需要某种回调,这样我就可以将它保存到db中。我该怎么做: 我在找subprocess.check_output() 但它不起作用。你知道吗


Tags: import程序网络脚本com数据库列表db
1条回答
网友
1楼 · 发布于 2024-06-16 06:11:40

这可能有助于您:

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)

例如。你知道吗

相关问题 更多 >