扭曲的应用程序没有扭曲

unp*_*guy 5 python daemon twisted

我使用Twisted框架为自己写了一个不错的应用程序.我使用如下命令启动它:

twistd -y myapp.py --pidfile=/var/run/myapp.pid --logfile=/var/run/myapp.log
Run Code Online (Sandbox Code Playgroud)

它很棒=)

为了启动我的应用程序,我用这个命令编写了一个脚本,因为我很懒惰^^但是因为我使用相同的twistd选项启动我的应用程序,并且我修改脚本shell解决方案是丑陋的,我怎么能做同样但在我的应用程序内?我想通过刚刚完成./myapp并且没有shell工作来启动我的应用程序.

我试图在扭曲的文档和阅读扭曲的源代码中搜索它,但我不明白它,因为它是我的第一个Python应用程序(精彩的语言顺便说一句!)

在此先感谢任何帮助.

Gly*_*yph 6

您需要将twistd脚本作为模块从Twisted 导入并调用它.使用现有命令行,最简单的解决方案是导入sys模块以替换argv命令行,使其看起来像您想要twistd运行的方式,然后运行它.

这是一个简单的示例脚本,它将使用现有的命令行并使用Python脚本而不是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()
Run Code Online (Sandbox Code Playgroud)

如果你想将它很好地捆绑到一个包而不是硬编码路径中,你可以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()
Run Code Online (Sandbox Code Playgroud)

你显然可以做类似的事情来计算适当的pidfile和logfile路径.

一个更全面的解决方案是编写一个插件twistd.来自Axiom对象 - 数据库项目的公理命令行程序作为一个经过测试的,具有生产价值的示例,说明如何对上述内容进行类似的命令行操作twistd,但是更全面地处理命令行选项,不同非扭曲运行实用程序功能,等等.