example español python subprocess popen

example - subprocess python español



Abriendo un proceso con Popen y obteniendo el PID. (1)

Estoy trabajando en una pequeña función ingeniosa:

def startProcess(name, path): """ Starts a process in the background and writes a PID file returns integer: pid """ # Check if the process is already running status, pid = processStatus(name) if status == RUNNING: raise AlreadyStartedError(pid) # Start process process = subprocess.Popen(path + '' > /dev/null 2> /dev/null &'', shell=True) # Write PID file pidfilename = os.path.join(PIDPATH, name + ''.pid'') pidfile = open(pidfilename, ''w'') pidfile.write(str(process.pid)) pidfile.close() return process.pid

El problema es que process.pid no es el PID correcto. Parece que siempre es 1 más bajo que el PID correcto. Por ejemplo, dice que el proceso comenzó en 31729, pero ps dice que se está ejecutando en 31730. Cada vez que lo he intentado está apagado por 1. Supongo que el PID que devuelve es el PID del proceso actual , no el iniciado. , y el nuevo proceso obtiene el ''siguiente'' pid que es 1 más alto. Si este es el caso, no puedo confiar en el process.pid + 1 devolución.pid process.pid + 1 ya que no tengo ninguna garantía de que siempre será correcto.

¿Por qué process.pid no devuelve el PID del nuevo proceso y cómo puedo lograr el comportamiento que busco?


De la documentación en http://docs.python.org/library/subprocess.html :

Popen.pid El ID de proceso del proceso hijo.

Tenga en cuenta que si establece el argumento de shell en Verdadero, este es el ID de proceso del shell generado.

Si el shell es falso, debería comportarse como esperas, creo.