如何将连接成功或失败传递给Twisted框架中的调用者?

时间:2017-09-30 02:20:49

标签: python twisted twisted.internet

在完成一些基本的tutorials之后,我希望我的TCP / UDP客户端退出一个代码,指示它是否已连接。在Twisted中返回退出代码的正确方法是:

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

然后,当进程终止时,它将以代码0退出以指示正常终止。如果客户端反而超时而不是成功连接,那么它应该如何将值传递回来然后传递给sys.exit而不是常量0?

1 个答案:

答案 0 :(得分:2)

通过参与延迟的结果来确定TCP连接是成功还是失败:

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

通过connecteddid_not_connect的适当实施,您应该能够将合适的值传递给后续的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()