我正在尝试使用子过程执行简单的回显操作:
import subprocess import shlex cmd = 'echo $HOME' proc = subprocess.Popen(shlex.split(cmd), shell=True, stdout=subprocess.PIPE) print proc.communicate()[0]
但是它什么也不打印。即使我将命令更改为echo "hello, world"它也不会打印任何内容。任何帮助表示赞赏。
echo "hello, world"
在Unix上shell=True,第2个及以下参数表示外壳本身,请使用字符串将命令传递给外壳:
shell=True
import subprocess cmd = 'echo $HOME' proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) print proc.communicate()[0],
您也可以将其编写为:
import subprocess cmd = '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], ...])