0

我需要从终端获取结果

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

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

4

1 回答 1

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=True,因为管道由 shell 运行,否则你会得到一个 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)

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

于 2013-08-17T01:40:39.257 回答