Consolenprogramm starten und Ausgaben auswerten



  • Hallo ich möchte gerne mit ffmpeg videos umwandeln
    nun wollte ich das ganze ein wenig automatisieren und mir ein kleines C++ mProgramm schreiben
    An sich ffmpeg anzuschupsen ist ja kein Problem nun würde ich aber gerne die Ausgabe von ffmpeg auswerten so das ich mir ausgeben kann wie weit ffmpeg ist

    aslo ist meine konkrete Frage: Wie kann ich ein (Konsolen-)Programm starten und die Ausgabe auswerten

    bitte rücksicht nehmen bin nur hobby Programmierer



  • Einfach mit man: popen(3). Das ist so wie man: system(3) nur gibt es einen ein FILE*-handle zurück. Wenn man mehr will, dann kann man mit man: fork(2)/man: pipe(2) sich etwas eigenes basteln.



  • Klapt danke 🙂
    habe das ganze mal mit den befehl top probiert klapt supper 🙂



  • habe das ganze mit popen(programm, "r") so das ich die Ausgabe habe
    jetzt wollte ich das ganze mit w fürs schreiben machen um mit den Programm komunizieren zu können nur leider klapt das nicht
    er gibt mir dan alles aus was das andere Programm ausgibt ich brauche nichtmal ein fgets er gibt automatisch alles aus

    ich habe zum testeten ein tetsprogramm gemacht
    mit

    cin >> buffer;
    cout << "Du hast eingegeben: "<< buffer;

    ich bekomme es leider nicht hin das ich test übergebe und er es dan ausgibt
    ich möchte dabei keine eingabe tätigen müssen

    test = popen("/home/stephan/test.bin", "w");
        cout << "oo";
        while(!feof(test))
         {
             if(fgets(buffer, 128, test)){
            cout << buffer;
            if (i==0){i++; fputs("test",test);}
            }
         }
        pclose(test);
    


  • Mit popen kriegst Du nur die eine oder die andere Richtung. Wenn Du beide Richtungen willst, musst Du mit pipe/fork arbeiten.



  • habe jetzt versucht das mit ffmpeg umzusetzen und popen
    doch leider klapt das nicht sobald popen benutzt wird übernimmt ffmpeg die ausgabe

    also ich brauche gar nichts machen nur popen("ffmpeg ...", "r") mehr nicht und schon kommt die ausgabe OHNE fgets

    und mit fgets bringt einen lehren buffer 😞

    das mit den pipe wollte ich dan versuchen doch das habe ich irgendwie nicht hinbekommen

    habe so die vorahnung das ffmpeg die infos nicht pber die pipe freigibt kann das sein?
    gäbe es den alternativen um herauszufinden wie weit das ganze vorangeschritten ist?



  • Eventuell schafft ja ffmpeg mit stderr für die Konsolmeldungen um stdout für andere Programme zum pipen frei zu lassen.



  • das scheint das problem zu sein 🙂

    nur leider fehlt immer was bzw kommt verspätet
    wenn eine datei schon exitiert dan fragt ffmpeg ja noch ob er die überschreiben soll
    die meldunk kommt aber nicht
    die meldung kommt erst wenn ich schon mir y bestätigt habe scheint so als würde die letzde zeile erst verspätet kommen?

    der aufruf erfolgt mit popen("ffmpegbefehl 2>&1", "r")


Anmelden zum Antworten