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

时间:2017-06-05 15:02:25

标签: python python-3.x

这会导致here Popen() x = subprocess.Popen("cmd.exe echo a", stdout=PIPE, shell=True) print (x.stdout.read()) 更大的问题。

以下不符合我的想法:

echo a

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

C:\Python36>

最终结果是打开cmd终端,打印标准&#34; Microsoft Windows版本......&#34;和CLI位置library SigDLL; uses System.SysUtils, System.Classes, Windows, Vcl.Forms, Vcl.Dialogs, SignatureForm in 'SignatureForm.pas' {SigForm1}; {$R *.res} var SigForm: TSigForm; procedure PrepareSigDLL(AppHandle : HWND); stdcall; begin SigForm := TSigForm.Create(nil); // <--------- CRASHES HERE end; procedure GetSignature(Variables: PChar); stdcall; begin ShowMessage('GetSignature called!'); end; procedure CloseSigDLL; stdcall; begin ShowMessage('CloseSigDLL called!'); end; exports PrepareSigDLL, GetSignature, CloseSigDLL; begin end.

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

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