当前位置: 首页 > 面试题库 >

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

袁永贞
2023-03-14
问题内容

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

import os

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

但是它将结果打印在终端中,并将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'])


 类似资料:
  • 问题内容: 我想将要在以后使用的命令存储在变量中(不是命令的输出,而是命令本身) 我有一个简单的脚本,如下所示: 但是,当我尝试更复杂的操作时,它会失败。例如,如果我做 输出为: 知道如何将这样的命令(带有管道/多个命令)存储在变量中以备后用吗? 问题答案: 使用eval:

  • 问题内容: 我想要的是将git命令的输出(例如git status)存储在shell脚本的变量内。当我说输出时,我说的是在终端上执行命令时返回的文本,例如:在回购之外执行git status时: 我尝试了这个: 但是’var’没有存储任何东西。 问题答案: 您可以使用: 即将stderr重定向到stdout,然后捕获输出。 否则,当会写上错误消息并且您的命令:仅正在捕获时。

  • 我遇到了一个mvn命令的问题,我正在构建为变量值,然后执行。 如果我直接执行命令,作为变量值的回显,它可以完美地工作。但是,如果我执行变量值,它会给我一个错误,就像其中一个参数不在双引号内一样。 我需要构建该命令,因为参数依赖于来自其他脚本的某些变量名,而不是运行这些脚本。 这些是命令: 有了这个,我将maven命令存储在一个变量中,如果$CLOUD值为真,则带有一些额外的参数: 如果我回显命令是

  • 因此,为了测试我的搜索结果是否因我输入的关键字而异,我想在键入关键字之前存储搜索结果的节点列表,然后将它们与添加关键字后得到的搜索结果的节点列表进行比较,但我无法使其起作用。 我试过: 然而,这并没有给我一个节点。我还试图使用一个带有的clientFunction,但是TestCafe然后告诉我使用Selector。 要怎么做?有没有更好的方法来测试这个,我没看到?

  • 我有一个字符串,它将被用作命令。此外,在运行该命令之前,我需要用变量值替换字符串模式。 但是在分配时,我得到的命令没有找到所有的输出行。 我试着放了些逃生卡,但没用。 bash:=:命令未找到bash:AWS_ACCESS_KEY_ID:命令未找到bash:=:命令未找到bash:AWS_SECRET_ACCESS_KEY:命令未找到bash:=:命令未找到bash:AWS_SESSION_TOK

  • 问题内容: 如下所示,是否可以保存结果?原因是,在第二和第三stdout.read()处我无法达到结果。 问题答案: 想象这是一个普通文件。如果您第二次打电话,您希望得到什么?-除非文件已在外部更改,否则为空(空字符串)。 保存字符串: 您可能会发现Fabric更易于使用(它用于在后台执行命令)。