Code: Alles auswählen
P := TProcess.Create(nil);
P.CommandLine := 'clscript.exe';
P.Options := P.Options+ [poUsePipes]-[poWaitOnExit];
WriteLn('-- executing --');
P.Execute;
while P.Running do
begin
// stellt sicher daß wir Platz haben
M.SetSize(BytesRead + READ_BYTES);
// versuche es zu lesen
n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
if n > 0
then begin
Inc(BytesRead, n);
Write('.')
end
else begin
// keine Daten, warte 100 ms
Sleep(100);
end;
end;
// lese den letzten Teil
repeat
// stellt sicher daß wir Platz haben
M.SetSize(BytesRead + READ_BYTES);
// versuche es zu lesen
n := P.Output.Read((M.Memory + BytesRead)^, READ_BYTES);
if n > 0
then begin
Inc(BytesRead, n);
Write('.');
end;
until n <= 0;
if BytesRead > 0 then WriteLn;
M.SetSize(BytesRead);
WriteLn('-- executed --');
S := TStringList.Create;
S.LoadFromStream(M);
WriteLn('-- linecount = ', S.Count, ' --');
for n := 0 to S.Count - 1 do
begin
WriteLn('| ', S[n]);
end;
WriteLn('-- end --');
Kommt aber nur:CLScript interpreter 1.0
Usage: clscript[.exe] script.lua
Jetzt kommt aber der Clou: wenn ich ein anderes Programm starte, dass nicht von FPC kompiliert wurde, also nicht writeln() für die Konsole benutzt, dann geht es. Starte ich z. B. ein Lua Script, dass dann mit dem Lua-eigenen print was ausgibt, also print ("Hello World"), dann wird mir das Hello World angezeigt, aber nichts, was mit writeln ausgegeben wurde. Und das wie gesagt, nur unter Windows.-- executing --
-- executed --
-- linecount = 0 --
-- end --
Hat da jemand Erfahrung damit? Ist das ein Bug in writeln(), oder bin ich nur zu blöd?