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 istaslo 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 ausich habe zum testeten ein tetsprogramm gemacht
mitcin >> 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üssentest = 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 ausgabealso 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")