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

如何将Shell输出转换为Python字典?附实操代码示例

如何将Shell命令输出转为Python字典?

嘿,我来帮你搞定把df命令输出转换成Python字典的需求!你的现有代码已经能拿到命令输出了,接下来只需要对输出做一些字符串处理,把表头和对应的数据映射起来就行。

完整解决方案代码

from subprocess import run, PIPE

# 更安全的方式执行命令(避免shell=True的潜在风险)
result = run(
    ['sudo', 'df', '-h', '/var/lib/docker/volumes/myvolume2/_data'],
    stdout=PIPE,
    stderr=STDOUT,
    text=True  # 直接返回字符串,不用手动decode
)
output = result.stdout

# 处理输出:分割行并过滤空行
lines = [line.strip() for line in output.split('\n') if line.strip()]

# 提取表头和数据行
headers = lines[0].split()
data_values = lines[1].split()

# 生成你需要的字典(只保留指定字段)
volume_info = {
    header: data_values[i]
    for i, header in enumerate(headers)
    if header in ['Filesystem', 'Size', 'Used', 'Use%']
}

print(volume_info)

代码解释

  • 替换Popen为run:subprocess.run()是Python 3.5+推荐的高层API,比Popen更简洁安全,加上text=True可以直接获取字符串输出,省去了手动decode的步骤。
  • 处理输出行:把输出按换行符分割,然后过滤掉空行(避免命令输出末尾的空行导致错误)。
  • 映射表头和数据:第一行是表头,第二行是对应的数据,用split()按空格分割后,通过字典推导式把表头和对应的数据值配对,同时过滤掉你不需要的字段(比如Avail、Mounted on)。

输出结果

运行后会得到你期望的字典:

{'Filesystem': '/dev/sda6', 'Size': '109G', 'Used': '32G', 'Use%': '31%'}

额外提示

如果你的场景中可能出现带空格的文件系统名称(虽然df的标准输出一般不会),可以考虑用更精准的分割方式,比如按固定列宽分割,但针对你当前的需求,上面的代码完全够用啦。

内容的提问来源于stack exchange,提问作者Aaditya R Krishnan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:18:15