Python Ping响应时间
我已经看到了许多关于如何使用python确定主机状态的示例,但是我似乎无法弄清楚如何将响应时间(以毫秒为单位)发送到varPython Ping响应时间,python,ping,icmp,Python,Ping,Icmp,我已经看到了许多关于如何使用python确定主机状态的示例,但是我似乎无法弄清楚如何将响应时间(以毫秒为单位)发送到var import time start = time.time() result = ping_host(hostname) duration = time.time() - start 因此,我应该替换ping_主机或主机名?从较高的级别来看,您只需使用time模块即可时间。时间提供自历元起的秒数,通常精度至少为毫秒 start = time.time() result =
import time
start = time.time()
result = ping_host(hostname)
duration = time.time() - start
因此,我应该替换ping_主机或主机名?从较高的级别来看,您只需使用
time
模块即可<代码>时间。时间提供自历元起的秒数,通常精度至少为毫秒
start = time.time()
result = ping_host(hostname)
duration = time.time() - start
duration
是一个变量,它以time
提供的最高精度保存ping所用的时间。如果要运行外部实用程序ping
并解析其输出,请尝试以下操作
导入子流程
对于ip地址或主机名列表中的ip:
结果=subprocess.run(
#命令作为列表,以避免shell=True
[ping','-c',1',ip],
#期望文本输出,而不是字节;让Python.decode()动态运行
text=True,
#stdout=管道stderr=管道等的缩写
捕获输出=真,
#如果ping失败,则引发异常(可能单独尝试/排除?)
检查=真)
对于result.stdout.splitlines()中的行:
#my ping的示例输出:
#PING hostname.example.com(10.9.8.7):56个数据字节
#10.130.42.70中的64字节:icmp_seq=0 ttl=60时间=11.190毫秒
#
#---hostname.example.com ping统计信息---
#发送1个数据包,接收1个数据包,0.0%数据包丢失
#往返最小/平均/最大/标准差=11.190/11.190/11.190/0.000毫秒
如果行中有“icmp_seq”:
计时=行。拆分('time=')[-1]。拆分('ms')[0]
打印(ip、定时)
如果愿意,您可以调整-c
参数以发送多个数据包,然后您可能应该解析出往返的min/avg/max/stdev行
如果没有找到预期的字符串,split
索引会小心地避免索引器,但是结果当然仍然是假的;这可以通过使用正则表达式来实现,或者在尝试解析之前,只要求time=
和ms
字符串也在行中
subprocess.run()
是子流程
包的主要现代API;您可以使用遗留函数subprocess。如果您真的想自己完成所有必要的管道操作(但可能不想,尤其是如果您不了解“必要的管道”在这里的含义),还可以检查\u output
,或rawsubprocess.Popen()
。@sealfab,这取决于ping逻辑的外观<上面的代码>ping_主机只是一个存根。尽管如此,一个看似合理的接口会让您将主机名传递给函数,正如我在上面所做的。但是如果我用ip或主机名替换ping_主机,它会返回一个语法错误,我不知道ping实现是什么样子<上面的代码>ping_host只是一个例子。如果您想分享您的实现,我们可以提供帮助。