如何在Popen中获取shell变量值

时间:2017-03-07 10:44:02

标签: python python-2.7 subprocess popen

我试图使用环境变量将一些秘密传递给shell命令。 Popen似乎正在使用"单引号概念"转义参数,以便命令无法获取变量值。

Python 2.7.1 (r271:86832, Mar  3 2017, 10:25:58) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux3
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.Popen(['echo','$PATH'])
$PATH

预期输出是真正的$ PATH值,例如" / bin:/ sbin:/ usr / bin ..."

谢谢!

3 个答案:

答案 0 :(得分:3)

您需要一个shell来评估您的行:

subprocess.Popen('echo $PATH', shell=True)

但如果这就是你想要的,那就考虑一下:

print os.getenv('PATH')

答案 1 :(得分:1)

使用shell=True,但要小心https://docs.python.org/3/library/subprocess.html#security-considerations

subprocess.Popen('echo $PATH', shell=True)

答案 2 :(得分:1)

如果从外部源提交命令行,则使用shell是危险的,因此请谨慎使用。

此外,还有一个可选参数来决定启动命令时shell的位置。

command = 'echo $PATH'
p = subprocess.Popen(command, shell=True, cwd='./')
p.communicate() # it would wait until the subprocess is complete.