Console & ReadProgramString() geht nicht!

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Console & ReadProgramString() geht nicht!

Beitrag von Mijikai »

Wenn ich eine Console öffne und dann ein Programm mit RunProgram() ausführe
funktioniert ReadProgramString() nicht mehr!? :?

Die Ausgabe des Programms wird direkt in die Console geschrieben!?
Ich muss aber wissen was das Programm zurückgibt. :freak:

Was kann ich tun?

:coderselixir:
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Console & ReadProgramString() geht nicht!

Beitrag von Josh »

Mijikai hat geschrieben:Die Ausgabe des Programms wird direkt in die Console geschrieben!?
Ich muss aber wissen was das Programm zurückgibt.
Verstehe ich jetzt nicht ganz. Wer schreibt was in die Konsole?

Wenn du ein Programm mit RunProgramm() startest, dann kommunizierst du mit diesem Programm über ReadProgramString(), WriteProgramString() oder ähnlichen Befehlen. Wenn dein Programm von einem anderen Programm geöffnet wird, dann kommunizierst du mit diesem Programm über die Konsole.

Ich verwende das auch, wobei mein Programm als Proxy fungiert. Läuft ohne Probleme.

Hast du die Flags in RunProgramm() überprüft? Klingt irgendwie, wie wenn du #PB_Program_Connect gesetzt hast.
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Re: Console & ReadProgramString() geht nicht!

Beitrag von Sommertv »

Hallo,
in mein Programm konnt ich das mit Hilfe von Kiffi so lösen:

Code: Alles auswählen

ShellPrg= RunProgram("youtube-dl", Chr(32) + Adress$, "",  #PB_Program_Open | #PB_Program_Write | #PB_Program_Read | #PB_Program_Error)
     AddGadgetItem(#LabAdr, 0, "Lade " + Adress$)    
     While WindowEvent():Wend ; updaten 

     If ShellPrg
       While ProgramRunning(ShellPrg)
          Position=0
          Dummy = ReadProgramString(ShellPrg)
            If Dummy <> ""
               Adress$=Dummy
               RPS + Dummy + #CRLF$
            EndIf
      
          Dummy = ReadProgramError(ShellPrg)
            If Dummy <> ""
               RPE + Dummy + #CRLF$
            EndIf
            
          Position=FindString(Adress$,"[ffmpeg] Merging formats into ")
          If Position
            Adress$=Mid(Adress$, (Position + 30), (Len(Adress$)))
            Debug "Titel= " + Adress$
          EndIf
       Wend
Der Rückgabestring des Shell Programms steht hier in der Variable Adress$,
das werte ich aus, indem ich nach einer eindeutigen Markierung suche,
danach bekomm ich in diesem Fall den Titel des Videos zurück.

Vielleicht hilft es dir weiter...

Schöne Grüsse
Kurt
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Console & ReadProgramString() geht nicht!

Beitrag von Mijikai »

Danke für die Antworten :)
Konnte das Problem lösen da das angesprochene Programm wenigstens die ExitCodes korrekt nutzt.
Allerdings kann ich immernoch keine Daten auslesen - aber die Console zeigt den Programm Output trotzdem an.

Meine Flags:

Code: Alles auswählen

#PB_Program_Open|#PB_Program_Read|#PB_Program_Ascii|#PB_Program_Wait
:?
Sommertv
Beiträge: 68
Registriert: 26.04.2019 10:31
Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
Wohnort: Mühldorf am Inn

Re: Console & ReadProgramString() geht nicht!

Beitrag von Sommertv »

Variabe$ = GetClipboard.Text(),
vielleicht hilft das was, damit holt man sich die Zwischenablage.
Das würde mich aber auch interessieren, wie man die Ausgaben der Shell in ein Programm übernimmt.

Schöne Grüsse
Kurt
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Console & ReadProgramString() geht nicht!

Beitrag von Nino »

@Mijikai:

1) Es ist in einem Forum wie diesem immer sinnvoll, einen kurzer Code zu posten der das Problem demonstriert. Denn gerade beim Programmieren steckt der Teufel im Detail. Eine "prosaische" Beschreibung der Situation reicht daher meist nicht aus.

2) Text der in der Console zu sehen ist, kann auf StdOut oder StdErr ausgegeben worden sein. Wenn man beim Auslesen von StdOut keinen bzw. nicht den kompletten Text erhält, so sollte man prüfen ob der betr. Text auf StdErr ausgegeben wurde.
Antworten