Python: ejecutar un subproceso desde un script

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
Anuncios

One Response to Python: ejecutar un subproceso desde un script

  1. Arnau Sanchez says:

    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.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: