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

2024-06-01 05:17:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将执行的shell命令的结果存储在一个变量中,但无法使其正常工作。我试着说:

import os    

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

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


Tags: import命令txt终端osshellcallsystem
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

改用^{}模块:

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

编辑:这是Python2.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在这种情况下很有效。(自Python2.6以来已弃用)

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

相关问题 更多 >