Вам необходимо импортировать скрипт twistd
как модуль из Twisted и вызвать его.Самым простым решением для этого, используя существующую командную строку, было бы импортировать модуль sys
вместо командной строки argv
, чтобы он выглядел так, как вы хотите, чтобы twistd
запускался, а затем запустите его.
Вот простой пример сценария, который возьмет вашу существующую командную строку и запустит ее с помощью сценария Python вместо сценария оболочки:
#!/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()
Если вы хотите аккуратно связать это в пакет,чем жестко заданные пути, вы можете определить путь к myapp.py
, посмотрев на специальную переменную __file__
, установленную Python в каждом модуле.Добавление этого к примеру выглядит следующим образом:
#!/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()
, и вы, очевидно, могли бы делать аналогичные вещи для вычисления соответствующих путей pidfile и logfile.
Более полное решение заключается в написании aплагин для twistd
.Программа командной строки axiomatic из проекта объектной базы данных Axiom служит проверенным, достойным производства примером того, как выполнять манипуляции с командной строкой twistd
аналогично тому, что описано выше, но скомплексная обработка параметров командной строки, различных функций, не запускаемых программой twistd, и т. д.