【问题标题】:How do I get the shell variable value in Popen如何在 Popen 中获取 shell 变量值
【发布时间】:2017-07-27 12:48:11
【问题描述】:

我正在尝试使用环境变量将一些秘密传递给 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...”

谢谢!

【问题讨论】:

    标签: python python-2.7 subprocess popen


    【解决方案1】:

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

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

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

    print os.getenv('PATH')
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-01-17
          • 1970-01-01
          • 2017-04-15
          • 2015-05-07
          • 2013-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-25
          相关资源
          最近更新 更多