subprocess.Popen(“ echo $ HOME” ...和subprocess.Popen([“ echo”,“ $ HOME”]]之间有什么区别?

问题描述 投票:2回答:3
我无法获得它是与bash相关或python子进程,但结果不同:

>>> 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',无)...

python python-3.x bash macos subprocess
3个回答
2
投票
https://docs.python.org/2/library/subprocess.html#popen-constructor上的文档中,如果您查看shell自变量,则会发现

2
投票
[当您拥有shell=True时,实际运行的进程就是shell进程,即,考虑它在unix上运行/bin/sh -c。您传递给Popen的参数将作为参数传递给此Shell进程。因此/bin/sh -c 'echo' '$HOME'打印换行符,第二个参数被忽略。因此,通常只应在shell=True中使用字符串参数。

2
投票
subprocess.Popen()的第一个参数告诉系统要运行什么。
© www.soinside.com 2019 - 2024. All rights reserved.