在subprocess.Popen中的if语句

时间:2016-10-07 22:33:30

标签: python bash if-statement subprocess

我试图通过python运行bash代码。正常语句(例如netstat)起作用。但是,如果函数如下所示,请不要这样做。为了正确运行以下代码,我应该更改什么? 提前致谢

>>> import os
>>> import subprocess
>>> 
>>> os.setenv['a']='test'
>>> _c = 'if [ "$a" == "test" ]; then echo $a; fi'
>>> print(subprocess.Popen(_c, shell=True, stdout=subprocess.PIPE).stdout.read().decode('utf-8'))
/bin/sh: 1: [: anto: unexpected operator

1 个答案:

答案 0 :(得分:2)

您尝试在子进程中运行的命令遵循bash shell语法,其中字符串相等性测试通过==执行。现在,在Unix上使用shell = True,shell默认为/bin/sh,而是通过简单的=执行相等测试。您在这里有两个选项:

  1. 在脚本中遵循sh语法
  2. 明确调用' / bin / bash'作为通过将executable='/bin/bash'添加到Popen
  3. 来运行的可执行文件

    对于选项(1),请按以下方式替换_c,它应该可以正常工作:

    import os, subprocess
    m_env = os.environ
    m_env['a'] = "test"
    _c = 'if [ "$a" = "test" ]; then echo $a; fi'
    print(subprocess.Popen(_c, shell=True, stdout=subprocess.PIPE).stdout.read().decode('utf-8'))
    

    打印出"测试"。