2017-09-05 83 views
1

我有一个subprocess指令Im运行: import subprocess; subprocess.call(['df', '--output=pcent'])解析输出选择第一%标志

其中output S:

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

我想与一些抢第二% (在这种情况下为80%,并对其执行计算)。

我该如何轻松做到这一点?

谢谢

回答

0

首先subprocess.call只返回返回码,所以你需要一些其他subprocess功能,如check_output

import subprocess 

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

然后,输出作为bytes(蟒蛇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())