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.
Was kann ich tun?
Console & ReadProgramString() geht nicht!
Re: Console & ReadProgramString() geht nicht!
Verstehe ich jetzt nicht ganz. Wer schreibt was in die Konsole?Mijikai hat geschrieben:Die Ausgabe des Programms wird direkt in die Console geschrieben!?
Ich muss aber wissen was das Programm zurückgibt.
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.
-
- 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!
Hallo,
in mein Programm konnt ich das mit Hilfe von Kiffi so lösen:
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
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
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...
Re: Console & ReadProgramString() geht nicht!
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:
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
-
- 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!
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
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...
Re: Console & ReadProgramString() geht nicht!
@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.
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.