使用 Popen 获取 Python 命令的输出



我正在尝试从Python(2.6.4)中执行一个shell命令来计算一个简单的公式,然后再将其作为参数传递给另一个程序。我的输入是这样的简单:

$[2*2]

我想计算该表达式并从我的 Python 脚本中获取结果,以便以后可以使用它。目前,我正在这样做(token $[2*2]):

token = subprocess.Popen(["echo", token], stdout=subprocess.PIPE).communicate()[0].strip()

我希望输出是4的,但它只是把我的原始令牌($[2*2])还给我。显然,当我跳转到 shell 并手动运行此命令 ( echo $[2*2] ) 时,我按预期得到4

Python 如何执行我缺少的这个命令有什么特别之处吗?

在 shell

中运行 echo $[2*2] 时,shell 会计算$[2*2]并将该评估结果传递给 echo 命令。在你的 Python 代码中,你传递$[2*2]直接回显,因此,它只返回回显。

您可以使用 subprocess.Popen 中的 shell=True 调用 shell 来评估您的命令:

token = subprocess.Popen(["echo " + token], 
                         stdout=subprocess.PIPE, shell=True).communicate()[0].strip()

subprocess.Popen将自动转义传入的任何参数,以便使用这些文字字符串运行命令,或者换句话说,运行的命令等效于 echo '$[2*2]' 。 有两种方法可以解决这个问题:

  • 使用shell=True

    >>> import subprocess
    >>> token = '$[2*2]'
    >>> subprocess.Popen("echo " + token, stdout=subprocess.PIPE, shell=True).communicate()[0].strip()
    '4'
    
  • 运行 bash 或其他 shell 作为您的命令:

    >>> subprocess.Popen(["bash", "-c", "echo " + token], stdout=subprocess.PIPE).communicate()[0].strip()
    '4'
    

相关内容

  • 没有找到相关文章

最新更新