Lazarus:奇怪的行为 运行 通过 TProcess 卷曲
Lazarus: strange behavior running curl via TProcess
我 运行 来自 Lazarus/FPC 应用程序的 'curl' 使用 TProcess,例如:
proc := TProcess.Create(nil);
proc.Executable:= 'E:\sendfileemail\curl.exe';
proc.CurrentDirectory:= 'E:\sendfileemail';
proc.Parameters.Add('--upload-file d:\ZP_1_2019.eml --url smtps://smtp.yandex.ru:465 --ssl-reqd --mail-from xxxx@yandex.ru --mail-rcpt yyyy@yandex.ru --user zzzz@yandex.ru:password --insecure');
proc.Options := proc.Options + [poWaitOnExit, poUsePipes, poStderrToOutPut];
proc.Execute;
AStringList := TStringList.Create;
AStringList.LoadFromStream(proc.Output);
AStringList.SaveToFile('output.txt');
AStringList.Free;
proc.Free;
总是失败:
curl: option --upload-file d:\ZP_1_2019.eml: is unknown
curl: try 'curl --help' or 'curl --manual' for more information
或者 curl 的第一个参数。
用 'proc.Parameters.Add' 分别添加每个参数都没有关系。
同时
E:\sendfileemail\curl.exe --upload-file d:\ZP_1_2019.eml --url smtps://smtp.yandex.ru:465 --ssl-reqd --mail-from xxxx@yandex.ru --mail-rcpt yyyy@yandex.ru --user zzzz@yandex.ru:password --insecure
已按预期从命令行手动执行。
ShellExecute 也可以。
通过 TProcess 运行ning 'curl' 有什么问题?
您将整个命令行放在一个参数中。把它们分开。使用多个 parameters.add() 语句
proc.Parameters.Add('--upload-file');
proc.Parameters.Add('d:\ZP_1_2019.eml');
等等
此外,这是短输出的"simple"解决方案。如果你有很长的输出,它会挂起。最好查看准备好的 RunCommand() 包装器。
我 运行 来自 Lazarus/FPC 应用程序的 'curl' 使用 TProcess,例如:
proc := TProcess.Create(nil);
proc.Executable:= 'E:\sendfileemail\curl.exe';
proc.CurrentDirectory:= 'E:\sendfileemail';
proc.Parameters.Add('--upload-file d:\ZP_1_2019.eml --url smtps://smtp.yandex.ru:465 --ssl-reqd --mail-from xxxx@yandex.ru --mail-rcpt yyyy@yandex.ru --user zzzz@yandex.ru:password --insecure');
proc.Options := proc.Options + [poWaitOnExit, poUsePipes, poStderrToOutPut];
proc.Execute;
AStringList := TStringList.Create;
AStringList.LoadFromStream(proc.Output);
AStringList.SaveToFile('output.txt');
AStringList.Free;
proc.Free;
总是失败:
curl: option --upload-file d:\ZP_1_2019.eml: is unknown
curl: try 'curl --help' or 'curl --manual' for more information
或者 curl 的第一个参数。
用 'proc.Parameters.Add' 分别添加每个参数都没有关系。
同时
E:\sendfileemail\curl.exe --upload-file d:\ZP_1_2019.eml --url smtps://smtp.yandex.ru:465 --ssl-reqd --mail-from xxxx@yandex.ru --mail-rcpt yyyy@yandex.ru --user zzzz@yandex.ru:password --insecure
已按预期从命令行手动执行。
ShellExecute 也可以。
通过 TProcess 运行ning 'curl' 有什么问题?
您将整个命令行放在一个参数中。把它们分开。使用多个 parameters.add() 语句
proc.Parameters.Add('--upload-file');
proc.Parameters.Add('d:\ZP_1_2019.eml');
等等
此外,这是短输出的"simple"解决方案。如果你有很长的输出,它会挂起。最好查看准备好的 RunCommand() 包装器。