我正在编写一些代码,该代码从 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 中的值。基本上,我从这个特定的代码块中得到的示例输出是
system()
90.3 0
为什么会发生这种情况?我该如何将该值实际存储到 l 中?这是我正在进行的更大工作的一部分,因此我最好将其保存在原生 Python 中。
在你当前的代码中,使用 system() 函数执行 shell 命令时,它只是执行该命令并返回命令的退出状态(即 ping 命令的退出码),而不是命令的输出。你希望获取命令的输出并将其存储在 l 变量中。
ping
l
要捕获命令的输出并将其存储在变量中,你应该使用 subprocess 模块,而不是 os.system(),因为 subprocess 允许你执行命令并获取其标准输出。
subprocess
os.system()
subprocess.check_output()
你可以改用 subprocess.check_output() 来执行命令并获取其输出,像这样:
import subprocess # 执行命令并获取输出 output = subprocess.check_output("ping -c 1 sitename | awk -F = 'FNR==2 {print substr($4,1,length($4)-3)}'", shell=True) # 解码输出为字符串(默认返回字节对象) l = output.decode('utf-8').strip() print(l)
stdout
shell=True
|
decode('utf-8')
strip()
如果 ping 命令返回的延迟是 90.3ms,你应该看到输出:
90.3ms
90.3
CalledProcessError
try-except
try: output = subprocess.check_output("ping -c 1 sitename | awk -F = 'FNR==2 {print substr($4,1,length($4)-3)}'", shell=True) l = output.decode('utf-8').strip() print(l) except subprocess.CalledProcessError as e: print(f"Error executing command: {e}")
这将确保你在命令执行失败时捕获并处理异常。