Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Ping响应时间_Python_Ping_Icmp - Fatal编程技术网

Python Ping响应时间

Python 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 =

我已经看到了许多关于如何使用python确定主机状态的示例,但是我似乎无法弄清楚如何将响应时间(以毫秒为单位)发送到var

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
,或raw
subprocess.Popen()

@sealfab,这取决于ping逻辑的外观<上面的代码>ping_主机只是一个存根。尽管如此,一个看似合理的接口会让您将主机名传递给函数,正如我在上面所做的。但是如果我用ip或主机名替换ping_主机,它会返回一个语法错误,我不知道ping实现是什么样子<上面的代码>ping_host只是一个例子。如果您想分享您的实现,我们可以提供帮助。