Tiene que importar el script twistd
como un módulo de Twisted e invocarlo. La solución más simple para esto, usando su línea de comando existente, sería importar el módulo sys
para reemplazar la línea de comando argv
para que se vea como desea que twistd
se ejecute, y luego ejecutarlo.
Aquí hay un script de ejemplo simple que se llevará a su línea de comandos existente y ejecutarlo con un script en Python en lugar de un script de shell:
#!/usr/bin/python
from twisted.scripts.twistd import run
from sys import argv
argv[1:] = [
'-y', 'myapp.py',
'--pidfile', '/var/run/myapp.pid',
'--logfile', '/var/run/myapp.log'
]
run()
Si desea agrupar esta muy bien en un paquete en lugar de rutas de codificación fija, puede determinar la ruta al myapp.py
al observar la variable especial __file__
establecida por Python en cada módulo. Agregando a esto el ejemplo se ve así:
#!/usr/bin/python
from twisted.scripts.twistd import run
from my.application import some_module
from os.path import join, dirname
from sys import argv
argv[1:] = [
'-y', join(dirname(some_module.__file__), "myapp.py"),
'--pidfile', '/var/run/myapp.pid',
'--logfile', '/var/run/myapp.log'
]
run()
y es obvio que podría hacer algo similar para calcular trayectorias PidFile y del archivo de registro correspondientes.
Una solución más completa es escribir a plugin para twistd
. El programa de línea de comandos axiomatic del proyecto de base de datos Axiom sirve como un ejemplo probado y productivo de cómo hacer una manipulación similar de línea de comandos de twistd
a lo descrito anteriormente, pero con un manejo más completo de las opciones de línea de comandos, Funcionalidad de utilidad que no funciona con twistd, y así sucesivamente.
Hola, gracias por su respuesta. Ya escribí mi aplicación como un complemento (bueno, ahora sé cómo configurar las opciones de mi código, como logfile y pidfile). Concluir Twistd como una biblioteca es exactamente lo que quiero :) Tu ejemplo es un poco complicado para mí, pero lo estoy intentando. – unpythonicguy
Bueno, lo intenté, pero realmente no entiendo tu ejemplo :( – unpythonicguy
¿Qué tal 'de twisted.scripts.twistd import run; from sys import argv; argv [1:] = ['-y', 'myapp. py ',' --pidfile =/var/run/myapp.pid ',' --logfile =/var/run/myapp.log ']; run() ' –