我试图从子进程中拉出一行。但到目前为止我还没找到。我想用一些不同的子进程来做这个。调用,这里有一个例子:
output = subprocess.call('vmstat -s, shell=True)
vmstat -s返回当前内存状态的列表。我可以读第2行(使用的内存),并将其存储在一个变量中供以后使用。
在python中做这个最好的方法是什么?
谢谢
用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 memoryn'
b' 2151640 K used memoryn'
b' 1450432 K active memoryn'
...
从子进程标准输出中读取数据的常用方法是使用communication方法。
>>> 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注入安全漏洞)。