twisted运行异步示例并在Python提示符下建立连接?

twisted运行异步示例并在Python提示符下建立连接?,python,twisted,python-interactive,Python,Twisted,Python Interactive,ldaptor项目在一个交互式Python提示符下有一些基于Twisted的示例代码。但是,在[1]的某一点上,如果您因为某个函数被弃用而尝试在提示下执行,则示例将中断--twisted.trial.util.deferredResult()。有趣的是,这显然让reactor运行,建立连接,并返回延迟结果(LDAPClient协议实例),该结果可以在交互式Python解释器中进行操作 我的问题是,有没有什么现代的方法来做这类事情,只是为了举例或只是为了实验?我可以在提示下执行以下操作: >

ldaptor项目在一个交互式Python提示符下有一些基于Twisted的示例代码。但是,在[1]的某一点上,如果您因为某个函数被弃用而尝试在提示下执行,则示例将中断--
twisted.trial.util.deferredResult()
。有趣的是,这显然让reactor运行,建立连接,并返回延迟结果(LDAPClient协议实例),该结果可以在交互式Python解释器中进行操作

我的问题是,有没有什么现代的方法来做这类事情,只是为了举例或只是为了实验?我可以在提示下执行以下操作:

>>> from ldaptor.protocols.ldap.ldapclient import LDAPClient
>>> from twisted.internet import reactor
>>> from twisted.internet.endpoints import clientFromString, connectProtocol
>>> e = clientFromString(reactor, "tcp:host=localhost:port=10389")
>>> e
<twisted.internet.endpoints.TCP4ClientEndpoint at 0xb452e0c>
>>> d = connectProtocol(e, LDAPClient)
>>> d
<Deferred at 0xb34656c>
>>从ldaptor.protocols.ldap.ldapclient导入ldapclient
>>>从twisted.internet导入
>>>从twisted.internet.endpoints导入clientFromString,connectProtocol
>>>e=clientFromString(reactor,“tcp:host=localhost:port=10389”)
>>>e
>>>d=连接协议(e,LDAPClient)
>>>d
但是我想不出任何方法来运行rector,并将延迟的结果返回到交互式提示符。可能吗?钩针项目会有帮助吗

[1] 您可以尝试:

  • python-m twisted.conch.stdio
  • pip安装bpython-urwid;bpython urwid——反应堆选择

其中的每一个都将为您提供一个增强的Python提示符,并在后台运行一个Twistedreactor。前者本机支持
延迟
s,但后者功能更丰富。

第一个选项很方便,因为它内置在twisted中,解决了如何在提示时让反应器运行的问题。然而,对于如何让上述代码中的延迟调用触发其回调,我并没有做出飞跃。我需要调用反应堆上的一些方法吗?由于
reactor.running==True
,我认为这可能发生在后台,但似乎不是这样。更新:我上面引用的代码中有一个错误
connectProtocol()
应该使用实例而不是类
LDAPClient
。一旦我在提示下尝试了正确的版本,它就成功了!