如何从python中的subprocess.call获取一行输出
我正在尝试从一个subprocess.call中提取一行内容,但到目前为止没有成功。我想用多个不同的subprocess.calls来做到这一点,这里举一个例子:
output = subprocess.call('vmstat -s, shell=True)
vmstat -s这个命令简单地返回当前内存状态的列表。我想读取第二行(已用内存),并把它存储在一个变量中,以便后续使用。
在Python中,最好的方法是什么呢?
谢谢
2 个回答
1
通常,从一个子进程的标准输出读取数据的方法是使用 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
,而且在不必要的情况下,一般不推荐使用它(因为这样会增加不必要的开销,并且在某些情况下可能会导致安全漏洞)。
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'
...