这导致了我使用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())