如何将执行的shell命令的结果存储在python的variables中?

我需要将我在一个variables中执行的shell命令的结果存储起来。 但我不明白。 我尝试像:

call=os.system("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'") print call 

但是它在terminal打印结果并将打印出来的值作为零,可能表示成功。 如何获得存储在variables中的结果?

改用subprocess模块:

 import subprocess output = subprocess.check_output("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'", shell=True) 

编辑:这是Python 2.7的新功能。 在早期版本中,这应该可以工作(使用如下所示的重写命令):

 import subprocess output = subprocess.Popen(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'], stdout=subprocess.PIPE).communicate()[0] 

作为一个方面说明,你可以重写

 cat syscall_list.txt | grep f89e7000 

 grep f89e7000 syscall_list.txt 

你甚至可以用一个awk脚本替换整个语句:

 awk '/f89e7000/ {print $2}' syscall_list.txt 

导致:

 import subprocess output = subprocess.check_output(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt']) 

commands.getstatusoutput将适用于这种情况。

 import commands print(commands.getstatusoutput("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'")) 

所有其他答案都是很好的答案。 在许多情况下,您确实需要运行外部命令。

这个具体的例子有另一个选择:你可以读取文件,逐行处理,并对输出做一些事情。

虽然这个答案不适用于“更常见的问题被问到”,我认为这应该总是被考虑。 即使可能,这并不总是“正确的答案”。 记住这个(更容易),并知道何时(不)应用它(更困难),将使你成为一个更好的程序员。