如何将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
相关产品推荐
相关产品推荐

