Lazarus:通过TProcess运行curl的奇怪行为



我使用类似的TProcess从Lazarus/FPC应用程序运行"curl">

proc := TProcess.Create(nil);
proc.Executable:= 'E:sendfileemailcurl.exe';
proc.CurrentDirectory:= 'E:sendfileemail';
proc.Parameters.Add('--upload-file d:29ZP_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:29ZP_1_2019.eml: is unknown  
curl: try 'curl --help' or 'curl --manual' for more information

或者不管旋度的参数是什么
使用"proc.Parameters.Add"单独添加每个参数并不重要。

同时

E:sendfileemailcurl.exe --upload-file d:29ZP_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运行"curl"有什么问题?

您将整个命令行放在一个参数中。把它们分开。使用多个参数.add((语句

proc.Parameters.Add('--upload-file');
proc.Parameters.Add('d:29ZP_1_2019.eml');

etc

此外,这是针对短输出的"简单"解决方案。如果你有长输出,它会挂起。最好看看准备好的RunCommand((包装器。

相关内容

  • 没有找到相关文章

最新更新