[Python-es] Lanzar aplicación como demonio

Oswaldo Hernández listas en soft-com.es
Mie Mar 2 16:42:03 CET 2011


El 01/03/2011 20:15, Sergio Fernández escribió:
> ¿por qué no le echas un vistazo al módulo daemon...?
> http://pypi.python.org/pypi/python-daemon/
>
> 2011/3/1 marco<python en diezplus.com>:
>> Hola a todos!!
>>
>> Tengo la siguiente duda.
>>
>> Necesito lanzar un proceso que quede residente en memoria y que cada cierto
>> tiempo ejecute algo,
>> debería quedar tipo demonio de linux o tipo TSR (Terminate and Stay
>> Resident).

Terminate and Stay Resident ... Ufff hace mas de 10 años que no veia eso ;)

>> Utilizo python 2.6 sobre Windows 7.
>> Mirad el siguiente ejemplo,
>>
>> #leer_com.py###########################
>> import threading, time
>> def espera():
>>     while True:
>>         time.sleep(15)
>>         # comprobaciones varias
>>         # etc
>>         print "comprobando..."
>> p = threading.Thread(target = espera,)
>> p.setDaemon(True)
>> p.start()
>> ######################################
>>
>> Si lo ejecuto en una shell de python, sin problema, cada 15 segundos me
>> ejecuta la función espera,
>> mientras tanto yo puedo seguir trabajando con cualquier cosa desde esa misma
>> shell.
>> Ahora bien, si lo ejecuto desde una línea de comandos del sistema, ej.:
>>   c:\>python leer_com.py
>> acaba el programa y no hace nada de nada. Lo he convertido a ejecutable con
>> py2exe y más de
>> lo mismo, no funciona. Si hago  p.join()  en el script queda en espera pero
>> no vuelve al interprete de comandos
>> que lo que yo necesito. Necesito lanzarlo y a ejecutar otra cosa.

El programa termina porque se alcanza el final y ya no tiene nada que 
hacer. Aunque hayas lanzado el tread debes mantenerlo vivo, un simple 
'while True: pass' al final hara lo que necesitas.

Para simular un daemon en windows puedes crear un servicio con py2exe o 
simplemente hacer que se cargue al arrancar el equipo.

Saludos,
-- 
Oswaldo Hernández


Más información sobre la lista de distribución Python-es