这会导致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终端,打印标准" Microsoft Windows版本......"和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.
。
答案 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()
的管道。