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

如何在Python中获取Linux服务器上iftop的实时控制台输出?

解决Python实时获取iftop输出的问题

你的代码存在几个细节问题导致无法实时获取输出,下面是修正方案和完整实现:

问题分析

  1. 命令参数传递不规范:["iftop -t"]这种写法在shell=True下虽能运行,但拆分参数的方式更安全易维护;
  2. 未处理输出缓冲:默认subprocess采用全缓冲模式,输出会攒够缓冲区才推送,无法实时获取;
  3. 缺少主动读取逻辑:启动进程后需要循环读取stdout才能拿到输出内容。

完整实现代码

import subprocess

def realtime_iftop_parser():
    # 启动iftop,-t参数强制纯文本模式输出(无终端控制字符)
    proc = subprocess.Popen(
        ["iftop", "-t"],
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,  # 合并错误输出到标准输出,避免遗漏信息
        text=True,
        bufsize=1,  # 启用行缓冲,确保输出实时刷新
        universal_newlines=True
    )

    # 实时读取并处理每一行输出
    try:
        for line in proc.stdout:
            # 这里替换成你的解析逻辑,比如提取IP、流量数据
            print(line.strip())
    except KeyboardInterrupt:
        # 捕获Ctrl+C,终止进程
        proc.terminate()
        print("\n已停止iftop数据读取")

if __name__ == "__main__":
    realtime_iftop_parser()

关键说明

  • -t参数:iftop默认是交互式终端输出,包含大量光标控制字符,-t切换为纯文本模式,适合程序解析;
  • bufsize=1:设置行缓冲模式,让subprocess每输出一行就立即推送到stdout,保证实时性;
  • 合并stderr:iftop可能输出警告或错误信息,stderr=subprocess.STDOUT能让你在同一个流里获取所有内容;
  • 权限问题:iftop需要root权限才能获取网络数据,运行脚本时记得加sudo。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:50:26