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

如何修复提取iptraf-ng值的Python脚本缩进错误?

问题修正方案

1. 缩进错误修复

Python对缩进要求严格,函数内所有代码块必须保持一致的缩进(推荐使用4个空格)。你的代码中cmd = ...行用了3个空格,后续代码用了4个,导致IndentationError。将函数内所有代码统一为4个空格缩进即可解决该问题。

2. 其他潜在问题修复

  • 文件路径错误:open('home/Aliexer/iptraf.log')缺少根目录符号/,会导致脚本在当前目录下查找不存在的home文件夹,应改为open('/home/Aliexer/iptraf.log')。
  • iptraf-ng运行模式问题:默认执行iptraf-ng -i ens160会进入交互式界面,脚本会卡住无法继续执行。需添加-t <秒数>参数指定采集时长,让程序自动退出后再读取日志。

修正后的完整代码

import subprocess

def get_iptraf_values(interface):
    # 用传入的interface参数拼接命令,添加-t参数指定采集10秒(可自行调整时长)
    cmd = f"iptraf-ng -i {interface} -L /home/Aliexer/iptraf.log -t 10"
    subprocess.run(cmd.split(), check=True)

    # 修正文件路径,添加根目录/
    with open('/home/Aliexer/iptraf.log') as f:
        lines = f.readlines()

    values = {}
    for line in lines:
        if 'PktsIn' in line:
            values['PktsIn'] = int(line.split()[1])
        elif 'IP In' in line:
            values['IP In'] = int(line.split()[1])
        elif 'BytesIn' in line:
            values['BytesIn'] = int(line.split()[1])
        elif 'InRate' in line:
            values['InRate'] = float(line.split()[1])
        elif 'PktsOut' in line:
            values['PktsOut'] = int(line.split()[1])
        elif 'IP Out' in line:
            values['IP Out'] = int(line.split()[1])
        elif 'BytesOut' in line:
            values['BytesOut'] = int(line.split()[1])
        elif 'OutRate' in line:
            values['OutRate'] = float(line.split()[1])

    return values

values = get_iptraf_values('ens160')
print(values)

额外说明

  • 调整-t 10中的数字可修改采集时长,单位为秒。
  • 确保运行脚本的用户对/home/Aliexer/目录有读写权限,否则无法生成日志文件。
  • 未安装iptraf-ng的话,可执行sudo apt install iptraf-ng(Debian/Ubuntu系)或对应发行版的安装命令完成部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:15:12