>>> subprocess.Popen("echo $HOME", shell=True, stdout=subprocess.PIPE).communicate()
(b'/Users/mac\n', None)
>>> subprocess.Popen(["echo", "$HOME"], shell=True, stdout=subprocess.PIPE).communicate()
(b'\n', None)
为什么第二次只是换行符?争论在哪里消失?
我无法获得它是与bash相关或python子进程,但结果不同:>>> subprocess.Popen(“ echo $ HOME”,shell = True,stdout = subprocess.PIPE).communicate()(b'/ Users / mac \ n',无)...
shell
自变量,则会发现shell=True
时,实际运行的进程就是shell进程,即,考虑它在unix上运行/bin/sh -c
。您传递给Popen的参数将作为参数传递给此Shell进程。因此/bin/sh -c 'echo' '$HOME'
打印换行符,第二个参数被忽略。因此,通常只应在shell=True
中使用字符串参数。 subprocess.Popen()
的第一个参数告诉系统要运行什么。