我正在学习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
也不会返回错误。
如果您有更好的示例如何执行和评估这样的命令,请告诉我。谢谢。
答案 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())