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

Python持续Ping主机脚本问题:无法获取持续Ping结果求助

问题原因

你的核心问题出在ping -t参数上——Windows系统下ping -t会无限循环发送ping包,不会主动终止执行,这就导致os.popen(...).read()会一直阻塞,永远等不到命令执行完毕返回结果,自然无法处理后续逻辑。

解决方案

要实现持续监控主机状态的需求,不能依赖-t参数,而是要循环执行有限次数的ping命令,每次执行完毕就检查结果,同时记录时间戳并只将宕机日志写入CSV。另外,推荐用subprocess模块替代os.popen,它更安全,也能更灵活地处理命令输出。

以下是修改后的完整代码:

import subprocess
import csv
import time
from datetime import datetime

# 生成要监控的IP列表
ip_list = [f"10.100.{ip}.1" for ip in range(1, 11)]

# 打开CSV日志文件(追加模式,避免覆盖历史日志)
with open("ping_down_logs.csv", "a", newline="", encoding="utf-8") as csvfile:
    # 定义CSV表头
    fieldnames = ["timestamp", "ip", "status"]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    
    # 如果文件为空,先写入表头
    if csvfile.tell() == 0:
        writer.writeheader()
    
    # 持续监控循环(按Ctrl+C可终止)
    while True:
        for ip in ip_list:
            # 执行单次ping检测(Windows用-n指定次数,这里设为1次快速检测)
            result = subprocess.run(
                ["ping", ip, "-n", "1"],
                capture_output=True,
                text=True,
                shell=False
            )
            
            # 判断主机是否宕机
            if "Request timed out" in result.stdout:
                # 生成格式化时间戳
                current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                # 写入宕机日志到CSV
                writer.writerow({
                    "timestamp": current_time,
                    "ip": ip,
                    "status": "DOWN - Request timed out"
                })
                # 立即刷新缓冲区,防止程序意外退出丢失数据
                csvfile.flush()
                print(f"{current_time} - {ip} 主机宕机")
            
        # 每轮检测后等待10秒,可根据需求调整间隔时间
        time.sleep(10)
关键细节说明
  • 替换os.popen为subprocess.run:能直接捕获命令的返回值和输出,参数可控性更强,安全性更高。
  • 用-n 1替代-t:每次只执行1次ping检测,快速获取当前状态,通过外层while True循环实现持续监控。
  • CSV规范写入:使用csv.DictWriter保证日志格式统一,追加模式打开文件避免覆盖历史记录,写入后立即刷新缓冲区防止数据丢失。
  • 跨平台适配:如果是Linux/macOS环境,需将ping参数改为-c 1,宕机判断字符串改为100% packet loss。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:25:10