[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