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

import os    

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

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

推荐答案

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

Linux相关问答推荐

我想显示包含一个方括号的行,方括号可以是开括号,也可以是闭括号.

如何使用 Golang 清除终端中的最后一行

为什么我的 Docker 进程不断在我的 Raspberry Pi 上重新启动?

读取命令停止执行 bash 脚本

使用打印命令 Select 子域

什么是`quote`命令?

如何比较两个压缩包的内容

-zxvf 在 tar -zxvf <文件名> 中是什么意思?

如何在 Linux 中命名线程?

加密/解密在两个不同的 openssl 版本之间不能很好地工作

使远程目录保持最新

zsh/bash 上不区分大小写的 Glob

将 CMake 项目导入 Eclipse CDT

为什么`du`的输出通常与`du -b`如此不同

从核心转储中获取堆栈跟踪

*nix 系统上是否有与 COM 等效的功能?如果不是,那么 *nix 的可重用性方法是什么?

如何知道linux调度器时间片?

C++:使用 longjmp 和 setjmp 安全吗?

在 Linux 上更新 PyCharm

使用 SED 将单词的首字母大写