You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python网络重连检测脚本问题:ping结果判断无输出

问题分析与修复方案

原代码核心问题

  1. 变量初始化错误:result = () 定义了空元组,而非存储命令退出码的整数,导致后续判断完全失效。
  2. 未捕获命令返回值:response()函数调用os.system后,未将返回的退出码赋值给result,始终返回空元组,无法反映ping的实际结果。
  3. 缺少循环检测逻辑:仅执行一次判断,无法实现"重复ping直到服务器恢复"的需求。
  4. ping命令参数错误:
    • Windows系统中,-w参数单位是毫秒,默认发4个包,应改为ping -n 1 -w 2000(仅发1个包,超时2000毫秒)。
    • Linux系统中,应使用ping -c 1 -W 2(仅发1个包,超时2秒),原-i是发包间隔,不是超时参数。

修正后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:15:31