扭曲的应用没有扭曲
问题内容:
我使用Twisted框架为自己编写了一个不错的应用程序。我使用如下命令启动它:
twistd -y myapp.py --pidfile=/var/run/myapp.pid --logfile=/var/run/myapp.log
它很棒=)
要启动我的应用程序,我用此命令编写了一个脚本,因为我很懒^^但是由于我使用相同的扭曲选项启动了我的应用程序,并且我认为脚本外壳解决方案很丑陋,因此我可以在我的应用程序内部执行相同的操作?我想仅通过运行./myapp
而无需外壳解决程序来启动我的应用程序。
我试图在扭曲的文档中以及通过阅读扭曲的源代码来搜索它,但是由于它是我的第一个Python应用程序(很棒的语言,顺便说一句!),我不理解它。
在此先感谢您的帮助。
问题答案:
您需要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()
如果您希望将其很好地捆绑到一个包中,而不是硬编码路径,则可以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路径。
一个更全面的解决方案是编写一个插件的twistd
。Axiom对象数据库项目中的公理命令行程序是一个经过测试的,有价值的示例,说明如何对上述内容执行类似的命令行操作twistd
,但是对命令行选项的处理更为全面,不同非扭转运行实用程序功能,等等。