从终端捕获结果(外部进程)

时间:2013-08-17 01:28:26

标签: python linux python-2.7 terminal

我需要从终端获取结果

mask = "audio"
a = os.system("ls -l | grep %s | awk '{ print $9 }'" % mask)
print a # a = 0, that's the exit code

#=>
file1_audio
file2_audio
0

这个命令只是打印结果到控制台,而我想将它捕获到一个变量。

1 个答案:

答案 0 :(得分:4)

使用subprocess模块

import subprocess

p = subprocess.Popen("ls -l | grep %s | awk '{ print $9 }'" % mask, 
    shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()

由于管道由shell运行,因此需要shell=True,否则您将获得No such file or directory

在Python 2.7中,您也可以使用

output = subprocess.check_output(
    "ls -l | grep %s | awk '{ print $9 }'" % mask
    stderr=subprocess.STDOUT,
    shell=True)

但我发现使用它很麻烦,因为如果管道返回0以外的退出代码,它会抛出subprocess.CalledProcessError,并且要捕获stdout和stderr,你需要将它们交错,这使得它在许多情况下无法使用