momentan entwickle ich einen Socket-Client in Lazarus, der mit einem externen Socket-Server kommuniziert. In der Regel werden Messwerte von Sensoren übertragen, die von einem anderen Programm bereitgestellt werden.
Dies alles funktioniert soweit.
Was nicht funktioniert, ist das Aufrufen externer Programme wie z.B. Linux-Programme.
Momentan mache ich dies mit:
Code: Alles auswählen
procedure TFormButtonClick(Sender: TObject);
var AProcess : TProcess;
AStringList : TStringList;
i : integer;
begin
AProcess := TProcess.create(nil)
AStringList := TStringList-Create;
AProcess.Options := AProcess.Options + [poNoConsole, poWaitOnExit, poUsePipes];
AProcess.CommandLine := Edit2.Text;
AProcess.Execute;
AStringList.LoadFromStream(AProcess.Output);
Memo1.Append(AStringList.Text);
AStringList.Free;
AProcess.Free;
end;
Das für mich Verblüffende besteht nun darin - und deswegen wende ich mich ans Forum - dass dies bei manchen Linux-Kommandos funkioniert und bei anderen so rein gar nichts passiert.
Z.B. wird die Ausgabe von pwd (eine Zeile) oder dir (wenige Zeilen) ausgegeben - beim Kommando df (ebenfalls wenige Zeilen Ausgabe) passiert gar nichts.
Als Kontrast dazu habe ich mal dmesg aufrufen lassen. Säuberlich werden Hunderte von Zeilen ausgegeben.
Der Effekt hat also nichts mit der Menge der Ausgabe an sich zu tun.
Hat jemand eine Idee, wie sich Linux-Kommandos einheitlich starten und die Ergebnisse nutzen lassen?
Falls von Bedeutung:
Hardware: Raspberry Pi
Betriebssystem: Raspbian Wheezy (4.1.7 #817)
Lazarus: 0.9.30.4-6
FPC: 2.6.0
Alternativen zum gewählten Socket-Konzept kommen als Lösung nicht in Frage.
Beste Grüße
Andreas