2015-06-14 64 views
0

我刚刚学习python(使用2.7.8),我试图找出什么是评估系统命令的输出最好的方法。我读过使用subprocess。 例如,我需要运行这个IF陈述并评估任何东西> 0,然后处理它。蟒蛇 - 如何正确评估系统命令的值

UNIX命令的例子: cat dump_cars_tbl.out | grep -i hummer | wc -l'(在这种情况下,它应该返回的1值)

在Python中,我测试过这一点,但我的结果是错误的。它应该返回一个Yes

>>> import subprocess 
>>> mycat=subprocess.call('cat dump_cars_tbl.out | grep -i hummer | wc -l', shell=True) 
1 
>>> if mycat > 0: 
...  print('Yes') 
... else: 
...  print('No') 
... 
No 

我在做什么错?另外,我应该使用subprocess.call这样的东西吗?我还需要确保命令mycat也不会返回错误。

如果你有更好的例子来说明如何执行和执行这样的命令,请给我看看。谢谢。

+1

'subprocess.call'的结果是*错误代码*,在进程成功完成的情况下应该为零。您可能正在寻找'subprocess.check_output'。 – jme

+0

@jme - 谢谢澄清。 – noober

回答

2

您需要使用subprocess.check_output

mycat = int(subprocess.check_output(cmd, shell=True)) 
+0

谢谢你给我看。这对我行得通。 – noober

0

你不需要shell=True这里:

#!/usr/bin/env python 
from subprocess import check_output 

count = int(check_output(['grep', '-ci', 'hummer', 'dump_cars_tbl.out'])) 

你并不需要运行一个外部进程,找到行的数在给定文件中包含子字符串hummer(忽略大小写),即模拟<dump_cars_tbl.out grep -ci hummer Python中的shell命令:

#!/usr/bin/env python 
with open('dump_cars_tbl.out', 'rb') as file: 
    count = sum(1 for line in file if b'hummer' in line.lower())