如何将执行的shell命令的结果存储在python的变量中? [复制]

Posted

技术标签:

【中文标题】如何将执行的shell命令的结果存储在python的变量中? [复制]【英文标题】:How to store the result of an executed shell command in a variable in python? [duplicate] 【发布时间】:2012-01-29 08:45:10 【问题描述】:

我需要将我执行的 shell 命令的结果存储在一个变量中,但我无法让它工作。我试过了:

import os    

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

但它会在终端打印结果并将 call 的值打印为零,可能表示成功。如何获取存储在变量中的结果?

【问题讨论】:

见这里:***.com/questions/1410976/… 【参考方案1】:

改用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'])

【讨论】:

我正在使用 python 2.6.6,它给了我错误:AttributeError: 'module' object has no attribute 'check_output' @user567879,你是对的。这个函数是在 Python 2.7 中添加的。我将在 Python 2.6 的方法中进行编辑。 如果我需要将 python 变量作为参数传递给执行的 shell 命令怎么办? @user567879:按照通常将变量放入列表中的方式进行操作,即['awk', '/f89e7000/ print $2', filename],然后将其传递给 Popen()。【参考方案2】:

commands.getstatusoutput 适用于这种情况。 (自 Python 2.6 起已弃用)

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

【讨论】:

该链接不再起作用,在 3.x 中已将其删除,请参阅 docs.python.org/2/library/commands.html【参考方案3】:

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】:

在 python 3 中你可以使用

import subprocess as sp
output = sp.getoutput('whoami --version')
print (output)

``

【讨论】:

以上是关于如何将执行的shell命令的结果存储在python的变量中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何用SQL代码将动态查询结果赋值给变量?

python输出shell命令执行结果

Python脚本中执行shell命令

如何让php执行shell

如何将一shell脚本中的每一步命令执行结果输出到指定日志文件中

如何将一shell脚本中的每一步命令执行结果输出到指定日志文件中