Python 判断网络连通性的实现方法

一颗松果
一颗松果
发布时间:2026-10-12 | 3人浏览过
原创

本文介绍了在 Python 中判断网络连通性的两种实现方法。基础方案利用 os.system 执行 ping 命令,通过返回的退出码(0 表示连通,非 0 表示失败)快速判断网络状态。进阶方案则使用 subprocess 模块获取控制台输出,结合正则表达式提取 IP 地址、TTL 值和往返时间,从而更全面地评估网络状况。

基础方案:利用 os.system 执行 ping 命令

在 Python 中,判断网络是否连通最简单直接的方法是利用操作系统的 ping 命令。我们可以通过 Python 内置的 os 模块中的 os.system() 函数来执行系统命令。

os.system() 函数会返回进程执行的退出错误码(exit code)。根据 ping 命令的常规行为:

  • 当网络连通时,ping 命令执行成功,返回的退出码等于 0。
  • 当网络不连通或目标不可达时,返回非 0 的值。

因此,我们可以通过判断返回值是否为 0 来快速确定网络连通状态。以下是具体的代码实现:

import os

# 执行 ping 命令,这里以 www.baidu.com 为例
exit_code = os.system('ping www.baidu.com')

# 判断退出码
if exit_code:
    raise Exception('connect failed.')
else:
    print('Network is connected.')

这种方案实现简单快捷,适用于只需要知道“通”或“不通”的场景。执行该命令后,控制台会输出类似以下的 ping 统计信息:

C:\Users>ping www.baidu.com
正在 Ping www.baidu.com [61.135.169.125] 具有 32 字节的数据:
来自 61.135.169.125 的回复: 字节=32 时间=4ms TTL=57
来自 61.135.169.125 的回复: 字节=32 时间=7ms TTL=57
来自 61.135.125 的回复: 字节=32 时间=9ms TTL=57
来自 61.135.125 的回复: 字节=32 时间=9ms TTL=57
61.135.125 的 Ping 统计信息:
 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
 最短 = 4ms,最长 = 9ms,平均 = 7ms

进阶方案:使用 subprocess 获取详细网络状况

如果不仅需要知道网络是否连通,还需要获取访问域名的 IP 地址、TTL(Time To Live)值以及往返时间(RTT)等详细信息,可以使用更高级的方法。这通常涉及使用 subprocess 模块来调用系统命令,并获取其标准输出。

具体步骤如下:

  1. 调用 subprocess 管道:使用 subprocess.Popen 或 subprocess.run 执行 ping 命令,并捕获其标准输出(stdout)。
  2. 解析控制台输出:ping 命令的输出包含丰富的信息,如目标 IP、每次回复的字节数、时间和 TTL 值。
  3. 使用正则表达式提取数据:通过编写正则表达式,从输出的字符串中提取 IP 地址、TTL 和时间等关键数据。
  4. 判断网络状况:根据提取到的 TTL 值和时间(延迟)来评估当前网络的质量。

虽然原文未提供具体的正则表达式代码,但实现思路是解析类似下面的输出行:

来自 61.135.169.125 的回复: 字节=32 时间=4ms TTL=57

通过正则匹配,可以提取出 IP(61.135.169.125)、时间(4ms)和 TTL(57)。这种方法提供了比单纯检查退出码更丰富的网络诊断信息。

总结

Python 判断网络连通性主要有两种途径:一是利用 os.system() 执行 ping 命令,通过退出码快速判断连通性;二是利用 subprocess 模块获取详细输出,结合正则表达式提取 IP、TTL 和时间等参数,以评估网络状况。前者简单直接,后者信息丰富,开发者可根据实际需求选择合适的方法。

以上就是 python 判断网络连通性的实现方法的详细内容,更多关于 python 网络编程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表