RunCommand -> no output data if no flush in called app
Original Reporter info from Mantis: MikiTheDark
-
Reporter name: Miki Dark
Original Reporter info from Mantis: MikiTheDark
- Reporter name: Miki Dark
Description:
Different behaviour between Lazarus 1.6.4 (54278) and 2.0.12 (64642). In new version I did not receive data from application called by RunCommand(... ). Same project build in old Lazarus works fine.
RunCommand(cmd, ['data'], strOut, [poNoConsole, poStderrToOutPut])
Steps to reproduce:
Build app in Lazarus 1.6.4 and 2.0.12 and run.
procedure TForm1.Button1Click(Sender: TObject);
var
strOut:String;
cmd:String;
begin
cmd:='testApp.exe';
Memo1.Lines.Clear;
if RunCommand(cmd, ['data'], strOut, [poNoConsole, poStderrToOutPut]) then begin
Memo1.Lines.Add('No fflush');
Memo1.Lines.Add(strOut);
end else begin
Memo1.Lines.Add('Failed to run '+cmd);
end;
if RunCommand(cmd, ['data', 'par2'], strOut, [poNoConsole, poStderrToOutPut]) then begin
Memo1.Lines.Add('With fflush');
Memo1.Lines.Add(strOut);
end else begin
Memo1.Lines.Add('Failed to run '+cmd);
end;
end;
Result 1.6.4:
No fflush
Received (2): data
With fflush
Received (3): data
Result 2.0.12:
No fflush
With fflush
Received (3): data
Additional information:
c app:
#include &LtPos;stdio.h>
int main(int argc, char *argv[])
{
if(argc < 2){
printf("No params\n");
}else{
printf("Received (%d): %s", argc, argv[1]);
if(argc > 2){
fflush(stdout);
}
}
return 0;
}
Mantis conversion info:
- Mantis ID: 38610
- Build: 64642
- Version: 2.0.12