我试图通过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
答案 0 :(得分:2)
您尝试在子进程中运行的命令遵循bash
shell语法,其中字符串相等性测试通过==
执行。现在,在Unix上使用shell = True,shell默认为/bin/sh
,而是通过简单的=
执行相等测试。您在这里有两个选项:
sh
语法executable='/bin/bash'
添加到Popen 对于选项(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'))
打印出"测试"。