这导致我遇到了一个更大的问题 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() 的管道。
