python - 如何正确评估系统命令中的值

时间:2015-06-14 19:53:46

标签: python python-2.7

我正在学习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也不会返回错误。

如果您有更好的示例如何执行和评估这样的命令,请告诉我。谢谢。

2 个答案:

答案 0 :(得分:2)

您需要使用subprocess.check_output

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

答案 1 :(得分: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 shell命令的Python:

#!/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())