grep然后解析,python命令行

时间:2016-06-25 21:35:47

标签: python shell unix command-line grep

当我这样做时,在python代码中,

os.system("mpstat 1 10 | grep Average")

我得到了,在stdout:

“平均值:所有0.00 0.00 0.00 0.00”以及其他一些东西

我可以添加什么

mpstat 1 10 | grep Average | SOMETHING

获取包含以Average开头的行的变量?

我需要第一个数字和第二个数字的总和。

我在这里尝试了接受的答案:

Can I redirect the stdout in python into some sort of string buffer?

但它不起作用。

1 个答案:

答案 0 :(得分:1)

取消os.system电话。请改用subprocess.Popen。这是你如何做到的:

>>> from subprocess import Popen
>>> from subprocess import PIPE
>>> mpstat = Popen(["mpstat", "1", "10"], stdout=PIPE)
>>> grep = Popen(["grep", "Average"], stdin=mpstat.stdout, stdout=PIPE)
>>> mpstat.stdout.close()
>>> res, err = grep.communicate()
>>> res
'Average:     all    0.79    0.00    0.46    0.03    0.00    0.01    0.00    0.00    0.00   98.71\n'
>>> res.strip().split()
['Average:', 'all', '0.79', '0.00', '0.46', '0.03', '0.00', '0.01', '0.00', '0.00', '0.00', '98.71']
>>> res.strip().split()[2:4]
['0.79', '0.00']
>>> values = map(float, res.strip().split()[2:4])
>>> values
[0.79, 0.0]