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

如何将Linux CPU、内存、磁盘查询命令嵌入Python subprocess获取输出

解决方案

方案1:直接通过shell=True执行完整命令(最简单,无转义烦恼)

你给出的是原生bash语法命令(含管道、反引号命令替换),直接开启shell=True参数即可让subprocess调用系统shell解析执行,不需要手动处理任何转义。注意用Python原始字符串r""包裹命令,避免Python自身把字符串里的反斜杠提前转义。

import subprocess

# 用原始字符串包裹完整shell命令,可按需去掉外层echo
cmd = r'''echo "CPU `LC_ALL=C top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}'`% RAM `free -m | awk '/Mem:/ { printf("%3.1f%%", $3/$2*100) }'` HDD `df -h /store | awk '/\// {print $(NF-1)}'`"'''

# 执行命令捕获输出
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if result.returncode == 0:
    monitor_info = result.stdout.strip()
    print(monitor_info)
else:
    print("命令执行错误:", result.stderr)

注意:shell=True仅适合执行固定的、无用户可控输入的命令,无注入风险,完全适配你的使用场景。

方案2:拆分命令链逐段调用(无需shell=True,更安全)

如果不想开启shell=True,可以把管道逻辑拆分,逐个调用每个命令,把前一个的输出作为后一个的输入,完全绕开shell转义问题。

import subprocess

# 1. 计算CPU使用率
top_res = subprocess.run(
    ["top", "-bn1"], 
    capture_output=True, 
    text=True,
    env={"LC_ALL": "C"}  # 环境变量单独传,不需要写在命令中
).stdout
grep_res = subprocess.run(["grep", "Cpu(s)"], input=top_res, capture_output=True, text=True).stdout
sed_res = subprocess.run(["sed", r"s/.*, *\([0-9.]*\)%* id.*/\1/"], input=grep_res, capture_output=True, text=True).stdout
cpu_usage = f"{100 - float(sed_res.strip()):.1f}%"

# 2. 计算内存使用率
free_res = subprocess.run(["free", "-m"], capture_output=True, text=True).stdout
mem_usage = subprocess.run(["awk", "/Mem:/ { printf(\"%3.1f%%\", $3/$2*100) }"], input=free_res, capture_output=True, text=True).stdout.strip()

# 3. 计算磁盘使用率
df_res = subprocess.run(["df", "-h", "/store"], capture_output=True, text=True).stdout
hdd_usage = subprocess.run(["awk", r"/\// {print $(NF-1)}"], input=df_res, capture_output=True, text=True).stdout.strip()

# 拼接最终结果
monitor_info = f"CPU {cpu_usage} RAM {mem_usage} HDD {hdd_usage}"
print(monitor_info)

可选优化方案(无需调用外部命令)

如果允许安装第三方库,用psutil直接读取系统指标,完全不用处理shell命令和转义,性能更好也更稳定:

import psutil

# CPU使用率(1秒采样比top单次采样更准确)
cpu_usage = f"{psutil.cpu_percent(interval=1)}%"
# 内存使用率
mem = psutil.virtual_memory()
mem_usage = f"{mem.percent:.1f}%"
# /store分区磁盘使用率
hdd = psutil.disk_usage("/store")
hdd_usage = f"{hdd.percent}%"

monitor_info = f"CPU {cpu_usage} RAM {mem_usage} HDD {hdd_usage}"
print(monitor_info)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:57:05