我正在使用fping
程序来获取主机列表的网络延迟。它是一个Shell程序,但是想在我的python脚本中使用它,并将输出保存在某个数据库中。
我正在这样使用subprocess.call()
:
import subprocess
subprocess.call(["fping","-l","google.com"])
此问题是由-l
标志指示的给定无限循环,因此它将继续将输入打印到控制台。但是在每个输出之后,我需要某种回调,以便可以将其保存在数据库中。我怎样才能做到这一点:
我寻找了subprocess.check_output()
但它不起作用。
答案 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)
例如。