Seite 1 von 1

Unvollständiges einlesen der Console bei Runprogram

Verfasst: 06.01.2009 15:40
von Badminton_Doerchi
Hallo,

wenn ich unter Linux den Befehl
"fping -C 2 www.google.de www.ard.de"
bekomme ich folgende Ausgabe:

www.google.de : [0], 84 bytes, 25.6 ms (25.6 avg, 0% loss)
www.ard.de : [0], 84 bytes, 10.7 ms (10.7 avg, 0% loss)
www.google.de : [1], 84 bytes, 25.5 ms (25.5 avg, 0% loss)
www.ard.de : [1], 84 bytes, 10.7 ms (10.7 avg, 0% loss)

www.google.de : 25.66 25.51
www.ard.de : 10.72 10.72

Wenn ich Fpingausgabe mit meinem kleinen Programm einlesen möchte, fehlen die letzten beiden Zeilen.
Hat jemand eine Lösung bzw. ein Erklärung dafür?

Code: Alles auswählen

hosts$="-C 2 www.google.de www.ard.de"

fpingv=RunProgram("fping",hosts$,"",#PB_Program_Open|#PB_Program_Read)

While ProgramRunning(fpingv)
  Output$=Output$+ReadProgramString(fpingv) + Chr(13)
Wend

 MessageRequester("Output", Output$)
Vielen Dank,
Doerchi

Verfasst: 06.01.2009 18:22
von Josef Sniatecki
Bessere Lösung wäre:

Code: Alles auswählen

hosts$="-C 2 www.google.de www.ard.de"

fpingv=RunProgram("fping",hosts$,"",#PB_Program_Open|#PB_Program_Read)

While ProgramRunning(fpingv)
  If AvailableProgramOutput(fpingv)
    Output$=Output$+ReadProgramString(fpingv) + Chr(13)
  Else
    Delay(16)
  EndIf
Wend

KillProgram(fpingv)
CloseProgram(fpingv)

MessageRequester("Output", Output$)
Das firsst dann nicht soviel CPU. Doch ob es jetzt damit funktioniert
glaube ich nicht. Das müsste dann am Program liegen, nicht am Skript
von dir. Mit Linux kenne ich micht nicht wirklich aus.

Verfasst: 06.01.2009 23:03
von Badminton_Doerchi
Hallo Josef,
vielen Dank für Deinen Tip,.. leider aber keine Verbesserung der Ausgabe.
Ja, es muß am fping Befehl liegen. Ich wundere mich nur, wieso mir der Befehl alle Zeilen auf der Linux Console ausgibt, wenn ich die Ausgabe aber mit ReadString abfragen möchte, manche Zeilen nicht angezeigt werden.
Viele Güße,
Doerchi

Verfasst: 06.01.2009 23:11
von Kaeru Gaman
eventuell dauert es einen moment, bis die ausgabe auf der console ankommt.
also, wenn fping die letzte ausgabe abschickt und sich beendet,
ist die rückgabe von ProgramRunning() schon #False,
obwohl die ausgabe in dem Moment erst eintrifft.

ProgramRunning erst am ende der schleife prüfen und eine kleine pause davor könnte schon abhilfe schaffen.



.. und btw:
Willkommen an Board! :D

Verfasst: 06.01.2009 23:18
von Badminton_Doerchi
Hallo Kaeru,
auch dafür Danke. Das hatte ich auch schon vermutet und getestet,... war es aber leider auch nicht.
Gruß
Doerchi

PS. Ist aber schön hier im Board, viele nützliche Tipps und schnelle Reaktionen. :-)

Verfasst: 07.01.2009 10:16
von Deeem2031
Aus dem von Kaeru Gamans genannten Grund würde ich nach die Schleife eine extra Schleife ala

Code: Alles auswählen

While AvailableProgramOutput(fpingv) 
  Output$=Output$+ReadProgramString(fpingv) + Chr(13) 
Wend
packen.