- Код: Выделить всё
// процедура нажатия на кнопку вызова консольной проги
procedure TForm1.Button2Click(Sender: TObject);
var i : integer;
str : ansistring;
begin
MyProc:= TProcess.Create(nil);
MyProc.CommandLine:='/media/DATA/MyWork/Test_projects/TProcess/ApplCl/project1';
//MyProc.CommandLine:='D:\MyWork\Test_projects\TProcess\ApplCl\project1.exe';
MyProc.Options:= MyProc.Options + [poUsePipes,poNewConsole];
MyProc.Execute;
MyProc.input.WriteAnsiString('Helffflo');
while MyProc.Running do begin
if MyProc.Output.NumBytesAvailable > 0 then
str:=MyProc.Output.ReadAnsiString;
end;
form1.Memo1.Lines.Add(str);
MyProc.Free;
end;
// а это тело процедуры консольного приложения
procedure TMyApplication.DoRun;
var
ErrorMsg: String;
sIn : TInputPipeStream;
sOut : TOutputPipeStream;
inMsg : ansistring;
outMsg : ansistring;
begin
try
sIn := TInputPipeStream.Create(StdInputHandle);
sOut:= TOutputPipeStream.Create(StdOutputHandle);
inMsg:= sIn.ReadAnsiString;
if inMsg = 'Hello' then
outMsg:= 'Hello my friend'
else
outMsg:= 'What you say, my friend?';
sOut.WriteAnsiString(outMsg);
Terminate;
finally
FreeandNil(sIn);
FreeandNil(sOut);
end;
end;
Самое интересное , что в винде всё работает. А вот в linux ну никак не хочет принимать строку, а просто висит и всё...