2017-09-30 2 views
0

tutorialsの一部を試した後、TCP/UDPクライアントを接続しているかどうかを示すコードで終了します。ツイストで終了コードを返すための正しい方法である:そしてTwistedフレームワークの呼び出し元に接続の成功または失敗を渡すにはどうすればいいですか?

point = TCP4ClientEndpoint(reactor, "localhost", 1234) 
d = connectProtocol(point, ClientProtocol()) 
reactor.run() 
sys.exit(0) 

、プロセスが終了すると、それが正常終了を示すために、コード0で終了します。クライアントが接続に成功するのではなくタイムアウトした場合、どのように値を渡してから、定数0ではなくsys.exitに渡すことができますか? connecteddid_not_connectの適切な実装と

d = connectProtocol(point, ClientProtocol()) 
d.addCallbacks(
    connected, 
    did_not_connect, 
) 

を、あなたはそれ以降に適切な値を渡すことができる必要があります:TCP接続は繰延の結果に出席することによって達成される成功したか失敗したかどうかを決定

+0

関数を使用して、 '終了コードをreturn'? –

答えて

2

sys.exitが呼び出されます。例えば

class Main(object): 
    result = 1 

    def connected(self, passthrough): 
     self.result = 0 
     return passthrough 

    def did_not_connect(self, passthrough): 
     self.result = 2 
     return passthrough 

    def exit(self): 
     sys.exit(self.result) 

main = Main() 
d = connectProtocol(point, ClientProtocol()) 
d.addCallbacks(
    main.connected, 
    main.did_not_connect, 
) 
reactor.run() 
main.exit() 
+0

私もUDPをサポートする必要があるので、コールバック(AFAICT、listenUDPは遅延インスタンスを返さない)を使用できませんでした。したがって、私は少し違ったアプローチを採用しなければなりませんでした。これは道徳的に同じです:twisted.protocols.policiesを追加してください。 TimeoutMixinをプロトコルクラスに追加し、timeoutConnection()でインスタンス変数を設定し、sys.exit()呼び出しでインスタンス変数を読み取ります。これは残念なことに、グローバルインスタンスを使用して、非 '_init__'メソッドで状態セットを渡すことを避けたいと思っていたものですが、別の方法があるようには思えません。 – ceridwen

+0

UDPクライアントは意味のある接続に失敗しません。 listenUDPは同期的に成功します。それにもかかわらず、私はこの答えで概説したのと同じアプローチを使用して、グローバル州を他の場所でも避けることができます。 –

関連する問題