我在两个文件中有2个python类。
file:LdapConnection,class:LdapClass(),method:getMachines(self)
@defer.inlineCallbacks
def getMachines(self):
c = ldapconnector.LDAPClientCreator(reactor, ldapclient.LDAPClient)
overrides = {self.basedn: (self.serverip, 389)}
client = yield c.connect(self.basedn, overrides=overrides)
yield client.bind(self.binddn, self.bindpw)
o = ldapsyntax.LDAPEntry(client, self.basedn)
results = yield o.search(filterText=self.query)
for entry in results:
for i in entry.get('name'):
self.machineList.append(i)
yield self.machineList
print self.machineList
return
以上打印报表打印machineList
file:Twisted,class:Caching,method:loadSettings(self)
@defer.inlineCallbacks
def loadSettings(self):
returned = yield LdapClass().getMachines()
print returned
在上面的课程中,我的打印件打印None
。我在这里做错了什么?
答案 0 :(得分:2)
在getMachines()
中,请勿yield self.machineList
。
在由defer.inlineCallbacks
修饰的方法中,在参数(一个defer.Deferred
对象)使用值回调(如果它不是defer.Deferred
,它')之前,yield会执行什么产生执行。我会继续)。 (它与Python 3中的新await
关键字类似。)您在loadSettings()
中正确使用了此。
在getMachines()
中,您没有defer.Deferred
;你有一个list
,所以它继续。要将该值返回给调用者,请在方法结束时调用returnValue(self.machineList)
。
答案 1 :(得分:1)
看起来您的loadSettings()
例程正在产生getMachines()
生成器,而不是生成器的结果。也许前者应该做“yield from
”?