[Lazarus] Tprocess to communicate with applications running
Michael Van Canneyt
michael at freepascal.org
Sun Oct 16 18:03:57 CEST 2011
On Sun, 16 Oct 2011, Celâl Emre ÖZ wrote:
> Ok. thank u your answer.
> I wrote a Python program. It's a xmpp client and it's running like a server. So it's always run but pascal don't get
> output or send input when python running.
>
> Turkish
> "Pythonda yazdığım xmpp client yazılımına, pascaldan girdi göndermiyor ya da çıktı alamıyorum.
> Tprocess çalışan bir programa program kapanana kadar erişemiyor"
>
> CODE
>
> procedure TForm1.Button1Click(Sender: TObject);
> var python:TProcess;
> cikti:TStringList;
> CharBuffer: array [0..511] of char;
> ReadCount: integer;
> ott:string;
> begin
> python:=TProcess.Create(nil);
> cikti := TStringList.Create;
>
> python.CommandLine:= 'c:\python27\python.exe jabber.py';
> python.Execute;
> ShowMessage('b');
> while python.Running do begin
> ShowMessage('c');
> if python.Output.NumBytesAvailable >0 then ShowMessage('A'); // ERRORR DON'T SHOW
> begin
> ReadCount := Min(512, python.Output.NumBytesAvailable);
Do not use NumBytesAvailable.
You can do it simply as follows:
while python.Running do
begin
Repeat
readCount:=python.Output.Read(CharBuffer,512);
Write(ott, Copy(CharBuffer, 0, ReadCount));
memo1.Lines.Add(Copy(CharBuffer, 0, ReadCount));
until (readcount<512);
end;
Read will simply read as much bytes as are available.
Michael.
More information about the Lazarus
mailing list