所以我在Python中这样一个菜鸟很痛苦,但我想找到一种方法来PING一个网站,然后吐出一个'if / else'条款。
到目前为止,我有这个:
import subprocess
command = "ping -c 3 www.google.com" # the shell command
process = subprocess.Popen(command, stdout=subprocess.PIPE,
stderr=None, shell=True)
#Launch the shell command:
output = process.communicate()
print output[0]
以下是我出错的地方,这是第二部分:
if output == 0.00
print "server is good"
else
print "server is hosed"
显然第2部分没有成功。
我的问题是,如何“读取”ping的结果(毫秒) icmp_seq = 0 ttl = 44 time = 13.384 ms
并说“如果ping时间超过12.000 ms那么就这样做” 其他 “做那个”
现在我正在打印,但很快我就想改变它,所以别的。
答案 0 :(得分:0)
subprocess.Popen
通常不是你想要的那个。所有简单任务都有便利功能。在您的情况下,我认为您需要subprocess.check_output
:
output = subprocess.check_output(command, shell=True)
有很多方法可以解析生成的输出字符串。我喜欢正则表达式:
matches = re.findall(" time=([\d.]+) ms", output)
re.findall
会返回list
str
,但您希望将其转换为单个数字,以便进行数值比较。使用float()
构造函数将str
转换为float
,然后计算平均值:
matches = [float(match) for match in matches]
ms = sum(matches)/len(matches)
示例程序:
import subprocess
import re
# Run the "ping" command
command = "ping -c 3 www.google.com" # the shell command
output = subprocess.check_output(command, shell=True)
# And interpret the output
matches = re.findall(" time=([\d.]+) ms", output)
matches = [float(match) for match in matches]
ms = sum(matches)/len(matches)
if ms < 12:
print "Yay"
else:
print "Boo"
请注意ping
的输出未标准化。在我的机器上,运行Ubuntu 14.04,上面的正则表达式工作。在您的机器上,运行其他操作系统,可能需要不同。