0

我正在处理一些从 python 执行 ping 操作并使用 awk 仅提取延迟的代码。这是我目前拥有的:

from os import system
l = system("ping -c 1 sitename | awk -F = 'FNR==2 {print substr($4,1,length($4)-3)}'")
print l

调用工作正常,但我在终端中system()得到一个输出,而不是存储到 l 中的值。基本上,我从这个特定的代码块中获得的示例输出将是

90.3
0

为什么会发生这种情况,我将如何将该值实际存储到 l 中?这是我正在做的一件更大的事情的一部分,所以我最好把它保存在原生 python 中。

4

4 回答 4

3

如果subprocess.check_output要将输出存储在变量中,请使用:

from subprocess import check_output
l = check_output("ping -c 1 sitename | awk -F = 'FNR==2 {print substr($4,1,length($4)-3)}'", shell=True) 
print l

相关:执行 python 脚本后额外的零

于 2013-11-13T22:06:30.953 回答
1

os.system()返回被调用命令的返回码,而不是输出到标准输出。

有关如何正确获取命令输出的详细信息(包括 Python 2.7 之前的版本),请参阅:Running shell command from Python and capture the output

于 2013-11-13T22:09:58.447 回答
1

顺便说一句,我会使用 Ping 包https://pypi.python.org/pypi/ping

看起来很有希望

于 2013-11-13T22:10:40.553 回答
0

这是我将输出存储到变量的方式。

test=$(ping -c 1 google.com | awk -F"=| " 'NR==2 {print $11}')
echo "$test"
34.9
于 2013-11-14T06:57:34.143 回答