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

修复Python ping脚本IndexError报错 支持命令行运行

Python Ping脚本索引越界报错修复

报错根因

触发IndexError: list index out of range的核心问题有4个:

  • 正则规则错误:原代码用r'time \w+'匹配延迟字段,但实际ping返回的延迟格式为time=xx.x ms,等号、浮点数小数点不在\w(仅匹配字母、数字、下划线)的匹配范围内,即使输出包含"time"字符串,正则也会返回空列表,直接取索引0就会触发越界。
  • 边界场景无兜底:读取host列表时未去除行尾换行符,可能导致ping命令参数异常;ping完全失败时IP匹配结果可能为空,直接取dns[0]也会触发同类越界;文件打开后未手动关闭,存在资源泄漏。
  • 判断逻辑不严谨:仅通过字符串是否包含"time"判定匹配成功,未校验正则实际返回结果。
  • 隐藏匹配bug:IP匹配正则中的.未转义,会匹配任意字符,可能匹配到非IP格式的错误内容。

修复后完整代码

import subprocess
import re

def main():
    print('IP, TimeToPing (ms)')
    # 上下文管理器自动处理文件关闭,避免资源泄漏
    with open('pingfile.txt', 'r', encoding='utf-8') as f:
        for host in f.readlines():
            # 去除行尾换行、首尾空格
            host = host.strip()
            # 跳过文件中的空行
            if not host:
                continue
            # 执行ping命令:macOS/Linux参数为 -c 发包数 -t 超时秒数,Windows环境请将-t改为-w
            ping_output = subprocess.getoutput(f"ping -c 1 -t 2 {host}")
            # 转义正则中的.,正确匹配IPv4地址
            ip_res = re.findall(r'\d+\.\d+\.\d+\.\d+', ping_output)
            # IP匹配失败时兜底用输入的host/域名展示,避免越界
            target_ip = ip_res[0] if ip_res else host
            # 兼容time=xx ms、time: xx.x ms等不同返回格式,直接提取延迟数值
            time_res = re.findall(r'time[=:]\s*([\d.]+)\s*ms', ping_output)
            ping_delay = f"{time_res[0]} ms" if time_res else "NotFound"
            print(f"{target_ip}, {ping_delay}")

if __name__ == "__main__":
    main()

运行说明

  • 将需要检测的IP、域名逐行写入和脚本同目录的pingfile.txt文件
  • 命令行进入脚本所在目录,执行python3 ping2.py即可正常运行
  • 如果是Windows系统运行,将代码中ping命令的-t 2参数改为-w 2000即可(Windows下ping的-w参数单位为毫秒)

内容的提问来源于stack exchange,提问作者user19099651

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:01:25