2016-12-04 3 views
0

サーバーをアプリケーションとして実行したい。そのためには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 

私は私が間違ってやっているものを見つけることができません。

しかし、私はエラーを取得しています。どんな提案も非常に役に立ちます。

答えて

0

service.Applicationは、すでにthis questionで議論されているように、usage.Optionsと一緒に使用することはできません。あなたは

python run_client.py --test True 

たり、ねじれたプラグイン(TAPファイル)を使用している場合を経由してサーバーを起動する場合

オプションを使用することができます。

twisted application configurationファイルを使用しています。このファイルでサーバーを構成すると想定され、運用システム上でサービスとして起動されます。ですから、いくつかの設定ファイルやデータベースにオプションを保存し、起動時にそれらを読むことはOKです。

関連する問題