我希望将我的服务器作为应用程序运行。为此,我有一个MyServer(name, port, host, testMode=False)类(它继承自DatagramProtocol对象)。
在另一个文件中,我创建了一些命令来创建和启动我的服务器。或多或少,它看起来像:
from twisted.application import service, internet
name, port, host = #read from database
server = MyServer(name, port, host)
udp_server = internet.UDPServer(port, server)
application = service.Application("MyServer")
udp_server.setServiceParent(application)值name, port和我从数据库中读取的host。我以'twistd -y my_server_run.py'身份启动服务器,一切都运行得很好。
但是,我希望能够在测试模式和标准模式下启动我的服务器。因此,我想将从命令行读取的参数作为参数传递给我的对象。我发现不能将它们解析为sys.argv的信息,但我必须实现usage.Options,所以我这样做:
from twisted.application import service, internet
from twisted.python import usage
class Options(usage.Options):
optParameters = [["test", "t", False, "The client test mode"]]
options = Options()
name, port, host = #read from database
try:
options.parseOptions()
server = MyServer(name, port, host, testMode=options['test'])
udp_server = internet.UDPServer(port, server)
application = service.Application("MyServer")
udp_server.setServiceParent(application)然后,我以如下方式运行服务器:
'twistd -y run_client.py --test True'然而,我得到了一个错误:
option -y not recognized
Unhandled Error
out: Traceback (most recent call last):
out: File "/usr/local/lib/python2.7/dist-packages/twisted/application/app.py", line 648, in run
out: runApp(config)
out: File "/usr/local/lib/python2.7/dist-packages/twisted/scripts/twistd.py", line 25, in runApp
out: _SomeApplicationRunner(config).run()
out: File "/usr/local/lib/python2.7/dist-packages/twisted/application/app.py", line 379, in run
out: self.application = self.createOrGetApplication()
out: File "/usr/local/lib/python2.7/dist-packages/twisted/application/app.py", line 444, in createOrGetApplication
out: application = getApplication(self.config, passphrase)
out: --- <exception caught here> ---
out: File "/usr/local/lib/python2.7/dist-packages/twisted/application/app.py", line 455, in getApplication
out: application = service.loadApplication(filename, style, passphrase)
out: File "/usr/local/lib/python2.7/dist-packages/twisted/application/service.py", line 411, in loadApplication
out: passphrase)
out: File "/usr/local/lib/python2.7/dist-packages/twisted/persisted/sob.py", line 224, in loadValueFromFile
out: value = d[variable]
out: exceptions.KeyError: 'application'
out: Failed to load application: 'application'
out: Could not find 'application' in the file. To use 'twistd -y', your .tac我找不到我做错了什么。任何建议都会非常有帮助。
发布于 2016-12-05 21:17:19
不幸的是,service.Application不能与usage.Options一起使用,因为在this question中已经讨论过了。
如果通过启动服务器,则可以使用以下选项
python run_client.py --test True或者如果你使用扭曲的插件(点击文件)。
您使用twisted application configuration文件,假设您在此文件中配置了您的服务器,它将作为生产系统上的一个服务启动。因此,可以将选项存储在一些配置文件或数据库中,并在启动时读取它们。
https://stackoverflow.com/questions/40957812
复制相似问题