Python网络重连检测脚本问题:ping结果判断无输出
问题分析与修复方案
原代码核心问题
- 变量初始化错误:
result = ()定义了空元组,而非存储命令退出码的整数,导致后续判断完全失效。 - 未捕获命令返回值:
response()函数调用os.system后,未将返回的退出码赋值给result,始终返回空元组,无法反映ping的实际结果。 - 缺少循环检测逻辑:仅执行一次判断,无法实现"重复ping直到服务器恢复"的需求。
- ping命令参数错误:
- Windows系统中,
-w参数单位是毫秒,默认发4个包,应改为ping -n 1 -w 2000(仅发1个包,超时2000毫秒)。 - Linux系统中,应使用
ping -c 1 -W 2(仅发1个包,超时2秒),原-i是发包间隔,不是超时参数。
- Windows系统中,
修正后的代码
import os import time ip = "8.8.8.8" def check_server(): # 根据系统生成对应ping命令 if os.name == "nt": cmd = f"ping -n 1 -w 2000 {ip}" else: cmd = f"ping -c 1 -W 2 {ip}" # 执行命令并返回连通状态(0表示连通) return os.system(cmd) == 0 # 循环检测直到服务器恢复 while True: if check_server(): print(f"!!! {ip} IS UP AND RUNNING AGAIN !!!") # 恢复后等待20秒再退出,方便查看输出 time.sleep(20) break else: # 未恢复时间隔2秒再检测(可按需调整) time.sleep(2)
代码说明
- 用
check_server()统一处理跨系统ping命令,返回布尔值表示服务器是否连通。 while True实现循环检测,直到服务器恢复后退出。- 服务器恢复后添加
time.sleep(20),满足查看输出的需求;未恢复时添加短间隔避免频繁发包。
内容的提问来源于stack exchange,提问作者Hackerman
相关产品推荐
相关产品推荐

