Textausgabe von Programm einlesen



  • Ich weiß nicht so recht, wie ich es ausdrücken soll, aber ich möchte folgendes Programmieren können:

    Ich habe ein Programm mit einer auf GTK+ basierenden Oberfläche. Nun möchte ich bspw. mittels fork() oder execvp() (gibt es hierzu noch weitere Alternativen?) ein externes Programm mit Parametern ausführen, wie z.B. "xz --help".
    Ist es nun möglich, die resultierende Textausgabe irgendwie in meinem Programm zu verarbeiten?

    Wenn nein, gäbe es irgendwelche Workarounds? Kann man z.B. mittels Bash-Datei die Ausgabe des Terminals in einer Textdatei abspeichern um diese anschließend in mein Programm einzulesen?

    Und bitte sagt jetzt nicht, ich könnte ja einfach die Hilfsdatei von xz in mein Programm einlesen. Das ist nicht das Ziel dieses Threads!! 😉

    Bislang konnte ich leider keine Lösung zu meiner Problemstellung finden.

    Edit:
    Ich habe gerade herausgefunden, dass man z.B. durch...

    xz --help > ausgabe.txt
    

    ...die Ausgabe in eine Datei umleiten kann. 🙂 Dies ist jedoch in gewisser Weise ein Umweg. Geht es also ggf. auch wie ganz oben beschrieben, dass ich von meinem Programm aus direkt auf die Textausgabe zugreifen kann?



  • Du kannst eine pipe benutzen und so die Standartausgabe in dein Programm umleiten
    wie hier mit pipe() http://www.c-plusplus.net/forum/305816
    oder du benutzt popen()
    Ganz vergessen in der shell geht das auch mit |

    xz --help | gtk-text-anzeiger
    


  • In der Regel ist das immer höchstens die zweitbeste Lösung. Wenn Du mit xz Datei komprimieren oder dekomprimieren willst, solltest Du die API verwenden. Das Kommandozeilentool xz ist nur ein wrapper um die libxz, die Du aus einem C- oder C++-Programm direkt ansprechen kannst. Das ist zuverlässiger und Du hast mehr Kontrolle. Wobei die API von libxz nicht ganz trivial ist. Ich habe mir mal einen wrapper dafür geschrieben, um den bequem via iostream-interface ansprechen zu können.



  • gary1195 schrieb:

    Du kannst eine pipe benutzen und so die Standartausgabe in dein Programm umleiten
    wie hier mit pipe() http://www.c-plusplus.net/forum/305816
    oder du benutzt popen()
    Ganz vergessen in der shell geht das auch mit |

    xz --help | gtk-text-anzeiger
    

    Vielen Dank für den hilfreichen Beitrag. 🙂
    Kannst du ein Beispiel dafür geben wie das mit dem gtk-text-anzeiger geht?



  • gtk-text-anzeiger muss einfach nur von stdin lesen. Das stdout von xz wird als stdin von gtk-text-anzeiger verwendet.

    Aber lies bitte auch nochmal die anderen Beiträge, die Pipe ist hier zum Testen praktisch, sonst aber nicht unbedingt optimal.


Anmelden zum Antworten