Unvollständiges einlesen der Console bei Runprogram

Für allgemeine Fragen zur Programmierung mit PureBasic.
Badminton_Doerchi
Beiträge: 4
Registriert: 06.01.2009 14:29
Wohnort: Hannover

Unvollständiges einlesen der Console bei Runprogram

Beitrag 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
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Beitrag 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.
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Badminton_Doerchi
Beiträge: 4
Registriert: 06.01.2009 14:29
Wohnort: Hannover

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Badminton_Doerchi
Beiträge: 4
Registriert: 06.01.2009 14:29
Wohnort: Hannover

Beitrag 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. :-)
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten