我试图从subprocess.call中拉出一行,但到目前为止,我没有运气。我想用许多不同的subprocess.calls做这个,但这里有一个例如:
output = subprocess.call('vmstat -s, shell=True)
vmstat -s simple返回当前内存状态列表。我想读第2行(使用过的内存)并将其存储在变量中供以后使用。
在python中解决这个问题的最佳方法是什么?
谢谢
答案 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注入安全漏洞)。