我试图使用环境变量将一些秘密传递给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 ..."
谢谢!
答案 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.