Skip to main content
 首页 » 编程设计

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

2025年05月04日14jillzhang

这导致我遇到了一个更大的问题 here使用 Popen()。

以下内容与我认为的不符:

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

返回 cmd 控制台的“title”消息,但永远不会执行 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()) 

最终结果是在打开的 cmd 终端中打印标准的“Microsoft Windows 版本...”和 C:\Python36> 的 CLI 位置。

请您参考如下方法:

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

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

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