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.

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.

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