サーバーをアプリケーションとして実行したい。そのためにはMyServer(name, port, host, testMode=False)
クラス(DatagramProtocol
オブジェクトを継承しています)があります。Twistd - service.Applicationを使用して引数の解析を可能にする
別のファイルでは、サーバーを作成して起動するためのコマンドをいくつか作成しました。多かれ少なかれ、それは次のようになります。
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
を実装する必要があり、その次のように私はそれをやった:
'twistd -y run_client.py --test True'
:次に
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)
、私は私のサーバーを実行します
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
私は私が間違ってやっているものを見つけることができません。
しかし、私はエラーを取得しています。どんな提案も非常に役に立ちます。