我正在尝试从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 如何执行我缺少的这个命令有什么特别之处吗?
中运行 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'