[Python-de] Mencoder und popen2
Paul Schulze
avlex at gmx.net
Sam Okt 8 16:29:29 CEST 2005
Hallo ihr Beiden,
Erst einmal danke für die schnellen Antworten von euch. Ich habe mich
nun entschlossen auf popen2.popen3 zu verzichten und statt dessen Popen3
zu verwenden und Stderr nach Stdout des Child Prozesses umzuleiten
(hauptsächlich, weil ich keine Ahnung habe, wie man diesen aus einem
Popen3 Objekt ausliest und die Ausgabe im Terminal unterdrückt, 2>&1 war
mein Freund). Damit hat mir der Hinweis auf Popen3.poll() natürlich sehr
geholfen. Kann es sein, dass das auch die portablere Variante ist? Macht
zu mindest auf den ersten Blick den Eindruck, da es glaube auch unter
Windows entsprechende Mechanismen gibt (hab das nur mal gehört, ich hab
kaum Ahnung von Windows Programmierung). Wenn ihr in dieser Hinsicht
noch Hinweise für eventuelle Portierungen habt, bin ich sehr dankbar,
das Programm soll schliesslich irgendwann mal für Mac und Windows zur
Verfügung stehen.
Ich habe mir auch commands.getstatusoutput( <cmd> ) mal angesehen und
finde es für ein einfaches Ausführen brauchbar, allerdings brauche ich
in diesem Fall die Ausgabe in Echtzeit (hab ich damit nicht
hinbekommen), ich will ja schliesslich die Daten der Ausgabe (etwa für
eine Progress Bar) direkt haben und nicht erst später. Das hab ich nun
mit einigem hin und her mit den flush() Methoden der from/tochild
Eigenschaften hinbekommen.
Falls ich die Tage noch rausfinde, wie ich mit Sourceforge umgehen muss,
werde ich den gesammten Source Code dann auch unter der GPL Lizens
online stellen, vielleicht wollt ihr ja mal reinschaun. Das Projekt,
welches ich dafür angemeldet habe, heisst movie2mobile, ist aber noch
nicht genehmigt, da ich mir sowas ja immer erst vor einem Wochenende
überlegen muss...
Danke für die Hilfe,
Paul.
Am Freitag, den 07.10.2005, 16:11 +0200 schrieb Diez B. Roggisch:
> > "while pin:" habe ich gewählt, weil ich annehme, dass pin == None wird,
> > wenn der MEncoder Prozess beendet ist und die Pipe dabei schliesst, kann
> > sein, dass ich auch da falsch liege, aber eine andere Möglichkeit zu
> > prüfen, ob der Prozess fertig ist kenne ich bislang nicht.
>
> Die Annahme ist falsch - woher soll denn wer anders einen Wert unter pin
> binden?
>
> Im TFM steht:
>
> Popen3 and Popen4 Objects
> Instances of the Popen3 and Popen4 classes have the following methods:
> poll( )
> Returns -1 if child process hasn't completed yet, or its return code
> otherwise.
> wait( )
> Waits for and returns the status code of the child process. The status code
> encodes both the return code of the process and information about whether it
> exited using the exit() system call or died due to a signal. Functions to
> help interpret the status code are defined in the os module; see section
> 6.1.5 for the W*() family of functions.
>
> Also: wait() aufrufen.
>
> MfG Diez
>
Am Freitag, den 07.10.2005, 16:07 +0200 schrieb Hartmut Goebel:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hallo,
>
> Paul Schulze schrieb:
>
> > aussehen kann: "mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4
> > -vop expand=176:144,scale=176:144 -o /tmp/movie2mobile.avi -ofps 15
> > sample.mpg"
>
> Dieses Kommando bekommt doch das Ein- und das Ausgabe-File genannt,
> oder? Dann kannst Du das einfacher haben:
>
> import commands
> status, text = commands.getstatusoutput(command)
>
> In Python 2.4 gibt es ein neuse Modul "subprocess", dass Dir hier ahber
> keine Vorteile verschafft.
>
> > "while pin:" habe ich gewählt, weil ich annehme, dass pin == None wird,
>
> Das stimmt nicht! pin ist eine Variable Deinen Scopes und kann daher
> nicht von einer andern Funktion verändert werden.
>
> Wenn dann müsstest Du
> while pin.readline(): ...
> oder
> for x in pin.readlines():
> nehmen.
>
> - --
> Schönen Gruß - Regards
> Hartmut Goebel
>
> | Hartmut Goebel | IT-Security -- effizient |
> | h.goebel at goebel-consult.de | www.goebel-consult.de |
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.2 (GNU/Linux)
> Comment: Using GnuPG with Mandriva - http://enigmail.mozdev.org
>
> iQEUAwUBQ0aBBszajR0mSa83AQIU6gf46qDiUuug4hg8+YQgQXNSRcJkrzgybNLb
> 5dULkfOFDOkOHGztJRIL9IRRAIHpxmDk9ceipsr+SQADWh5Wj4IcZtCwWM49R+7V
> hvMmhNhDj+Uk/HtJzkTcWP+fvxzbxatbuc2Y8M9TvXAdzjg/bkQ9xoQbRCkO+BLI
> lx/7Yu+ZtBnl3PrHXex0O8pPAE6DlS6cb5lKTj2AkMPRig00/m/PWPGNZc3bOyTJ
> l+ZSa9CXeECXBiwb61+h5SWGRd1QV+0rYscWWQLMD0b/lxWaojUuXQcB55HOR4uU
> AL+LZQNXVMG5W4X8VaHsIVYgAhAp3p0gcPbm6Cf5CO/VuihSWc50
> =w26W
> -----END PGP SIGNATURE-----
--
Paul Schulze
Mail: avlex at gmx.net
Public Key: http://lightbringer.dyndns.org/keys/key_avlex.asc
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : nicht verfügbar
Dateityp : application/pgp-signature
Dateigröße : 189 bytes
Beschreibung: Dies ist ein digital signierter Nachrichtenteil
URL : http://starship.python.net/pipermail/python-de/attachments/20051008/1a20f12b/attachment.pgp