在Unix上
shell=True,第2个及以下参数表示外壳本身,请使用字符串将命令传递给外壳:
import subprocesscmd = 'echo $HOME'proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)print proc.communicate()[0],
您也可以将其编写为:
import subprocesscmd = 'echo $HOME'print subprocess.check_output(cmd, shell=True),
从子流程的文档:
在带有
shell=True的Unix上,shell默认为/ bin /
sh。如果args是字符串,则该字符串指定要通过外壳执行的命令。这意味着字符串的格式必须与在shell提示符下键入时的格式完全相同。例如,这包括在文件名中使用引号或反斜杠转义。
如果args是序列,则第一项指定命令字符串,任何其他项将被视为shell本身的其他参数 。也就是说,Popen等效于:
Popen(['/bin/sh', '-c', args[0], args[1], ...])



