Seite 1 von 1

noch mehr RunProgram() probleme

Verfasst: 20.11.2008 20:11
von Lowrider39
Hallo Leutz,

irgendwie komme ich mit dem RunProgram Befehl nicht ganz zurecht. Jedenfalls funktioniert er nicht so, wie im Refference Manual beschrieben. Sicherlich, mit dem Compiler-Befehl funktioniert es. Allerdings wenn ich mit dem Befehl z.B. so was simples wie whoami aufrufe, hängt sich das ganze in einer never ending Loop auf.

Hier mal ein kleiner Programmausschnitt, hab da schon alles mögliche versucht. Sogar Vermeidung der Fensterausgabe, erst in eine Stringvariable schreiben und erst später ausgeben klappt nicht.

Code: Alles auswählen

  DispCal = RunProgram("/usr/bin/whoami","","/usr/bin",#PB_Program_Open|#PB_Program_Read)
  Zeile$=""
  If DispCal
     While ProgramRunning(DispCal)     
       AddGadgetItem(HandleStandardOutput,-1,Str(ProgramID(DispCal)))
       If AvailableProgramOutput(DispCal)
        Zeile$=Zeile$+ReadProgramString(DispCal)+Chr(13)
        AddGadgetItem(HandleStandardOutput,-1,Zeile$)
       EndIf

     Wend

;    AddGadgetItem(HandleStandardOutput,-1,Zeile$)
    CloseProgram(DispCal)  

  Else
    MessageRequester("Information", "Programm nicht gefunden", 0)

  EndIf
 
Was habe ich hier falsch gemacht? das Programm hängt sich regelmäßig in der While-Wend-Schleife auf. Es wird von PB also nicht bemerkt, dass das Program schon längst beendet ist. Oder doch nicht? Vielleicht hätte ich diesen Beitrag ins Anfängerforum stellen sollen?

Verfasst: 20.11.2008 20:22
von Josef Sniatecki
Ich würde ein Delay(...) in die Schleife einbauen und das "Zeile=Zeile+..."
weglassen und direkt in den Parameter setzen. Ich weiß aber nicht, ob
es dann auch funktioniert.

Verfasst: 20.11.2008 20:56
von Lowrider39
Hatte ich auch schon probiert, tut nich

Verfasst: 20.11.2008 20:58
von bobobo
unter dem Fenster-OS wuppt der code

hab als programm das whoami (cygwin) benutzt damit da ähnliche
verhältnisse herrschen.

Verfasst: 20.11.2008 21:17
von Josef Sniatecki
Dann kann es wohl nur am Betriebsystem / Compiler liegen oder am
Programm, dass die Ausgabeinformationen angibt, da ich selbst solch
eine Schleife benutze. (Und es hat geklappt :wink: )

Vieleicht findet jemand einen Umweg...

Verfasst: 09.12.2008 19:07
von Didelphodon
Empfehlung: Verwendet nicht AvailableProgramOutput mit ReadProgramString, denn ReadProgramString ist für das Entgegennehmen von \n-finalisierten Strings (also Zeilen) gedacht und wartet (siehe auch PB-Hilfe) eigenständig auf Daten.
AvailableProgramOutput sollte mit RAW-Daten verwendet werden.

... so zumindest meine Erfahrungen ...

LG Didel.

PS: Evt. ist der Thread http://www.purebasic.fr/german/viewtopic.php?t=18486 interessant für Euch ...