Seite 1 von 1

probleme mit stderr

Verfasst: 20.11.2010 01:54
von haggi
Hallo liebe pb linuxer :-)

ich habe ien problem bei meinem ersten pb linux projekt.

ich möchte mittels runprogramm ein stderr abfangen. die flag wurde auch übergeben mittels #PB_Program_Open| #PB_Program_Read | #PB_Program_Error

das problem ist, dass der error nicht abgefufen wird. mache ich irgendetwas falsch, was ihr hier seht?

ich habe im source des anderen proggies nachgeschaut, von dem ich das abgrabbe, laut dem source ist es so, dass er dass in die stderr schriebt.


vielen dank für eure hilfe

gruß haggi!

Re: probleme mit stderr

Verfasst: 20.11.2010 10:08
von Nino
Steht EnableExplicit am Beginn Deines Programms? Wenn nicht dann kann es gut sein, dass Du einen Tippfehler z.B. in einem Variablennamen hast.
haggi hat geschrieben:mache ich irgendetwas falsch, was ihr hier seht?
Wir sehen hier nicht viel. :D
Am besten postest Du hier mal den relevanten Teil Deines Codes.

Grüße, Nino

Re: probleme mit stderr

Verfasst: 20.11.2010 10:38
von ts-soft
Nino hat geschrieben:
haggi hat geschrieben:mache ich irgendetwas falsch, was ihr hier seht?
Wir sehen hier nicht viel. :D
Langsam nimmt das hier ja Überhand, fragen ohne notwendige Infos.
Es gibt hier keine Hellseher! Also bitte etwas Zeit nehmen und vorher überlegen, ob die
Infos reichen, den Fehler zu erkennen.

Ansonsten fangen hier nur Ratespiele an, was zwar Unterhaltsam sein könnte, aber dann
eher in den Offtopic passt.

Gruß
Thomas

Re: probleme mit stderr

Verfasst: 24.11.2010 11:57
von haggi
Hallo Nino,

hier mal der für mich relevante teil.

Code: Alles auswählen

id1 =  RunProgram("/usr/local/bin/l4m320t_tool","-u ","/usr/local/bin/ ", #PB_Program_Open|  #PB_Program_Read  )

                If id1
                  While ProgramRunning(id1)
                     If AvailableProgramOutput(id1)
                       AddElement(konsoleauslesen())
                       konsoleauslesen()\data = ReadProgramString(id1) 
                       Debug konsoleauslesen()\data
                     EndIf
                   Wend
                 EndIf
     
wie du siehst enable expliziet steht nicht dabei.
leider musste ich feststellen, dass du recht hattest, hatte wirklich nett viel dabei gehabt :-) sorry! hoffe das reicht dir.


gruß haggi

Re: probleme mit stderr

Verfasst: 24.11.2010 14:40
von NicTheQuick
An dieser Stelle möchte ich sagen, dass PB da leider ein bisschen inkonsequent ist. Du brauchst folgenden Befehl: 'ReadProgramError()'.
Aber irgendwie scheint es kein entsprechendes 'AvailableProgramError()' oder 'ReadProgramErrorData()' zu geben. Wieso bietet man nicht für beide Outputstreams die selben Möglichkeiten?

Re: probleme mit stderr

Verfasst: 24.11.2010 21:28
von Nino
haggi hat geschrieben:hier mal der für mich relevante teil.

Code: Alles auswählen

id1 =  RunProgram("/usr/local/bin/l4m320t_tool","-u ","/usr/local/bin/ ", #PB_Program_Open|  #PB_Program_Read  )

                If id1
                  While ProgramRunning(id1)
                     If AvailableProgramOutput(id1)
                       AddElement(konsoleauslesen())
                       konsoleauslesen()\data = ReadProgramString(id1) 
                       Debug konsoleauslesen()\data
                     EndIf
                   Wend
                 EndIf
     
Wenn man in die Hilfe zu RunProgram() kuckt wird deutlich, dass das gewünschte Programm
1. irgendwie das Flag #PB_Program_Error verwenden sollte
2. irgendwo die Funktion ReadProgramError() enthalten sollte
Beides hast Du in Deinem Code nicht 'mal versucht zu benutzen ...
haggi hat geschrieben:wie du siehst enable expliziet steht nicht dabei.
Ja, schade! Nach dem was ich oben schrieb ist doch klar, dass man es verwenden sollte!
NicTheQuick hat geschrieben:Wieso bietet man nicht für beide Outputstreams die selben Möglichkeiten?
Das verstehe ich auch nicht.

Immerhin lässt sich die Sache mit folgenden zwei kleinen Beispielprogrammen demonstrieren (getestet mit PB 4.51 unter Ubuntu 10.10 x86).
Das Programm "WriteStdErr" habe ich als Executable kompiliert, und dann das Programm "ReadStdErr" in der PB-IDE ausgeführt.

Code: Alles auswählen

; -- Programm "WriteStdErr"
;    Executable-Format: Console
; Öffnet ein Terminal-Fenster und schreibt die
; Zahlen 1 bis 10 in jeweils eine Zeile.

EnableExplicit
Define i

OpenConsole()
For i = 1 To 10
   ConsoleError(Str(i))
   Delay(200)
Next
CloseConsole()

Code: Alles auswählen

; -- Programm "ReadStdErr"
;    Executable-Format: Console
; Startet das Programm "WriteStdErr", liest dessen
; Ausgabe und schreibt sie in PBs Debug-Fenster.

EnableExplicit
Define id, x$

id = RunProgram("./WriteStdErr", "", "", #PB_Program_Open | #PB_Program_Error)
If id
   While ProgramRunning(id)
      x$ = ReadProgramError(id)
      If x$ <> ""
         Debug x$
      EndIf   
   Wend
   CloseProgram(id)
EndIf
Grüße, Nino