为什么Popen("cmd.exe echo a", shell=True)没有运行"echo"?



这导致了我使用Popen()的更大问题。

以下内容没有做我认为应该做的事情:

x = subprocess.Popen("cmd.exe echo a", stdout=PIPE, shell=True)
print (x.stdout.read())

返回CMD控制台的"标题"消息,但echo a从未执行。

与:

相同
x = subprocess.Popen(["cmd.exe", "echo a"], stdout=PIPE)
print (x.stdout.read())

cmd = "cmd.exe echo a"
x = subprocess.Popen(shlex.split(cmd), stdout=PIPE)
print (x.stdout.read())

最终结果是打开标准" Microsoft Windows版本..."和C:Python36>的CLI位置的开放式CMD终端。

当指定 shell=True时,命令处理器cmd.exe是隐式的。

>>> x = subprocess.Popen("echo a", stdout=subprocess.PIPE, shell=True)
>>> print (x.stdout.read())
a

通过明确调用它,您可以启动嵌套的命令控制台,就好像您在提示符下键入cmd.exe一样。它的输出不会输入Popen()的管道。

cmd.exe要求参数 /c在传递脚本之前要执行:

x = subprocess.Popen(["cmd.exe", "/c", "echo a"], stdout=PIPE)
print (x.stdout.read())

最新更新