Python: ejecutar un subproceso desde un script
Noviembre 19, 2007
En un script de python necesitamos, ante unas condiciones, lanzar un programa externo (puede estar escrito en python o no, es irrelevante). Queremos monitorizarlo y para ello nos gustaría saber su PID.
Lo habitual es hacer un import os y empezar a jugar con los spawn*, los waitpid, los exec*, los popen* e incluso algún fork(). El resultado suele ser procesos zombie (Z) que no se inician bien y se quedan en defunct. Con bastante tiempo, podríamos tener algún éxito pero lo recomendable eshacer uso del módulo subprocess y, en concreto, de Popen().
Así que para lanzar un proceso independiente y recoger su PID escribid:
PID = subprocess.Popen([cmdline], shell=True).pid
Entry Filed under: Uncategorized. .
1 Comment Add your own
Leave a Comment
Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed
1.
Arnau Sanchez | Junio 1, 2008 at 6:01 pm
Si me permites, algunos comentarios:
- Puntualizar que normalmente no es necesario ejecutar el nuevo proceso en una subshell (ojo que en tal caso el comando a ejecutar se da en una lista y no en una cadena).
- Más que el valor del PID, lo que normalmente guardaremos será el objecto Popen (siempre podremos hacer popen.pid para lograr el PID). A través de popen podremos escribir/leer a través de los canales popen.stdin/sdout/stderr, esperar a que finalice el proceso con popen.wait(), etc, etc.