我需要存储我在变量中执行的shell命令的结果。但我无法做到这一点。我尝试过:
call=os.system("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'")
print call
但它在终端中输出结果并将call的值打印为零,可能表示成功。如何将结果存储在变量中?
答案 0 :(得分:36)
改为使用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'])
答案 1 :(得分:10)
commands.getstatusoutput适用于这种情况。
import commands
print(commands.getstatusoutput("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'"))
答案 2 :(得分:0)
在python 3中,您可以使用
import subprocess as sp
output = sp.getoutput('whoami --version')
print (output)
``
答案 3 :(得分:0)
os.popen适用于此目的。 popen-打开与命令之间的管道。返回值是连接到管道的打开文件对象,可以读取该对象。 split('\ n')将输出转换为列表
import os
list_of_ls = os.popen("ls").read().split('\n')
print list_of_ls
import os
list_of_call = os.popen("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'").read().split('\n')
print list_of_call
答案 4 :(得分:-1)
这里的所有其他答案都是很好的答案。在许多情况下,您需要运行外部命令。
此特定示例还有另一个选项:您可以读取文件,逐行处理,并对输出执行某些操作。
虽然这个答案对“被问到的更普遍的问题”不起作用,但我认为应该始终予以考虑。即使在可能的情况下,它也并非总是“正确答案”。记住这个(更容易),知道何时(不)应用它(更难),将使你成为更好的程序员。