如何将执行的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的变量中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章