解析df --output的输出以选择第一个%符号

时间:2017-09-05 15:13:51

标签: python-2.7 parsing subprocess

我正在运行subprocess命令: import subprocess; subprocess.call(['df', '--output=pcent'])

output s:

Use%
 80%
  0%
  0%
  3%
  1%
  0%
 51%
  0%

我想抓住第二个%,旁边有一个数字(在这种情况下为80%,并对其进行计算)。

我怎样才能轻松做到这一点?

谢谢

1 个答案:

答案 0 :(得分:0)

首先subprocess.call只返回返回码,因此您需要其他subprocess函数,例如check_output

import subprocess

output = subprocess.check_output(['df', '--output=pcent'])

然后,输出以bytes(python 3)提供。所以你必须将其解码为ASCII,然后我将使用嵌套列表&发电机理解:

  • 根据空格(换行符/空格)分割
  • 处理每个令牌并删除百分号
  • 如果令牌由数字
  • 组成,则仅转换为整数

代码(使用命令的模型输出,以便每个人都可以重现):

output = b"""Use%
 80%
  0%
  0%
  3%
  1%
  0%
 51%
  0%"""

percents = [int(x) for x in (y.rstrip("%") for y in output.decode("ascii").split()) if x.isdigit()]

print(percents)

给出:

[80, 0, 0, 3, 1, 0, 51, 0]
当然,这比你要求的要多。要获取第一个项目,只需获取此列表中的第一项或使用生成器理解和next获取第一个标记:

first_percent = next(int(x) for x in (y.rstrip("%") for y in output.decode("ascii").split()) if x.isdigit())