2012-01-20 17 views
12

Estoy usando un par de programas python, uno de los cuales debe llamar al segundo.Llamar a un subproceso python como daemon y salir

Pero esto debe hacerse de manera que el primer programa haga que el segundo sea un daemon (o que se ejecute en segundo plano), luego sale, sin esperar a que termine el segundo programa.

¿Es esto posible en Python?

He estado buscando en os.fork, módulo de subproceso, pero estoy bastante confundido como el camino correcto para lograr esto ...

Respuesta

10

Se puede utilizar para este subprocess.Popen:

import subprocess 

cmd = ['/usr/bin/python', '/path/to/my/second/pythonscript.py'] 
subprocess.Popen(cmd) 

Es posible que desee redirigir stdout y stderr en algún lugar, puede hacerlo pasando stdout=<file_obj> al constructor Popen.

+1

Entonces, según esto, 'daemon_process' debería hacerse igual a algo como '/ usr/bin/pyton /path/to/my/second/pythonscript.py'? –

+0

@JavierNovoaC. 'Popen' toma una lista de argumentos. Editaré mi respuesta para aclarar. –

+0

gracias! eso funcionó;) –

3

Un "daemon" tiene una definición más específica que solo "proceso en segundo plano". De forma predeterminada, Popen ejecutará un subproceso y devolverá el control a su programa para que continúe ejecutándose. Sin embargo, eso no dice nada sobre tratar con señales (especialmente SIGHUP si el usuario sale de su caparazón antes de que finalice su proceso de fondo) o desconectarse de stdin, stderr, stdout y cualquier otro descriptor de archivo abierto en el momento de invocar Popen. Si realmente quiere decir que quiere un daemon, debe usar el módulo python-daemon, una implementación de PEP 3143. Esto se ocupa de las partes brutas en las que no quiere pensar.

Cuestiones relacionadas