Python调用Windows Ping命令获取延迟数据实战
本文介绍在Windows系统中如何利用Python标准库中的subprocess模块调用外部ping.exe命令,并通过正则表达式精准提取往返延迟(最小值、最大值、平均值)。代码示例已适配Python 3环境,同时说明了Windows与Linux下网络诊断工具输出格式的差异及处理建议。
Python在Windows下调用Ping命令并获取延迟数据
第1步:导入核心依赖模块
在Python中执行外部系统命令推荐使用内置的subprocess模块,配合re正则表达式模块即可完成数据解析。该方案无需安装第三方依赖,直接调用操作系统自带的网络工具。
第2步:配置子进程参数并发起请求
使用subprocess.Popen创建子进程执行ping.exe。通过stdin、stdout、stderr设置为subprocess.PIPE来接管标准输入输出流。此处传入待检测的目标主机(如域名或IP),并开启shell=True以确保Windows路径解析正确。
import subprocess
import re
# 配置子进程执行环境
p = subprocess.Popen(
["ping.exe", "google.com"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True
)
第3步:读取输出流并匹配关键指标
进程启动后,通过p.stdout.read()一次性读取全部文本输出。Windows版ping返回的统计信息包含固定格式的延迟数据,编写对应的正则模式进行提取。re.compile支持忽略大小写,可稳定捕获三次往返时间。注意读取字节流需转为字符串再匹配。
# 定义匹配Windows ping输出结果的规则
regex = re.compile(r"Minimum = (\d+)ms, Maximum = (\d+)ms, Average = (\d+)ms", re.IGNORECASE)
# 执行匹配并打印结果
results = regex.findall(p.stdout.read().decode('utf-8'))
print(results)
第4步:验证结果并处理跨平台兼容性问题
运行代码后,控制台将输出形如[('3', '12', '7')]的列表,分别对应Min、Max、Avg延迟毫秒数。如需判断命令是否成功执行完毕,建议在读取后添加p.wait()阻塞等待子进程结束,避免资源泄漏。
需要注意的是,不同操作系统的ping工具输出格式存在显著差异。Linux/macOS版本的ping默认显示rtt min/avg/max/mdev字段,若将该脚本迁移至Unix类系统,需重新调整正则表达式或使用platform.system()进行环境判断。生产环境中建议结合异常捕获(如超时、目标不可达)完善健壮性。
以上就是Python在Windows下实现ping操作并接收返回信息的详细内容,更多关于Python系统命令调用与网络状态检测的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









