如何从python中的subprocess.call获取一行

时间:2014-07-07 10:54:11

标签: python python-2.7

我试图从subprocess.call中拉出一行,但到目前为止,我没有运气。我想用许多不同的subprocess.calls做这个,但这里有一个例如:

output = subprocess.call('vmstat -s, shell=True)

vmstat -s simple返回当前内存状态列表。我想读第2行(使用过的内存)并将其存储在变量中供以后使用。

在python中解决这个问题的最佳方法是什么?

谢谢

2 个答案:

答案 0 :(得分:2)

使用check_output代替call

>>> subprocess.check_output('vmstat -s', shell=True).splitlines()

或者您可以管道stdout

>>> from subprocess import Popen, PIPE
>>> for line in Popen('vmstat -s', shell=True, stdout=PIPE).stdout:
...     print(line)
... 
b'      3717436 K total memory\n'
b'      2151640 K used memory\n'
b'      1450432 K active memory\n'
...

答案 1 :(得分:1)

从子进程stdout读取的常用方法是使用communicate方法。

>>> from subprocess import Popen, PIPE
>>> proc = Popen(['vmstat', '-s'], stdout=PIPE, stderr=PIPE)
>>> stdout, _stderr = proc.communicate()
>>> stdout.splitlines()[1]
'     13278652 K used memory'

请注意,此处不需要使用shell=True,并且在不需要时通常不鼓励使用它(存在不必要的开销,并且在某些情况下它可能会创建shell注入安全漏洞)。