Я пытаюсь выполнить простую последовательность обратного вызова в витой. Идея состоит в том, что я вхожу в сервис, и когда логин успешен, я начинаю посылать команды. Это мой код:
from twisted.internet import reactor, defer
class MyService:
def __init__ (self):
self.handle = None
def login(self):
def onConnect(handle):
self.handle = handle
return
df = defer.Deferred().addCallback(onConnect)
reactor.callLater(2, df.callback, "dummyhandle")
return df
def sendCommand(self, command):
def onResult(result):
print result
return result
if self.handle == None:
print "Not logged in"
return
else:
df = defer.Deferred().addCallback(onResult, result ="xxx")
return df
my = MyService ()
my.login().addCallback(my.sendCommand, command = "format")
reactor.run()
Запуск этого кода приводит к следующей трассировке стека:
Unhandled error in Deferred: Traceback (most recent call last): File "/usr/lib/python2.6/dist-packages/twisted/internet/base.py", line 1179, in mainLoop
self.runUntilCurrent() File "/usr/lib/python2.6/dist-packages/twisted/internet/base.py", line 778, in runUntilCurrent
call.func(*call.args, **call.kw) File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", line 280, in callback
self._startRunCallbacks(result) File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", line 354, in _startRunCallbacks
self._runCallbacks()
--- <exception caught here> --- File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", line 371, in _runCallbacks
self.result = callback(self.result, *args, **kw) exceptions.TypeError: sendCommand() got multiple values for keyword argument 'command'
Здесь важно то, что sendCommand не нужен результат входа в систему, а другие данные. Необходимо, чтобы вход в систему завершился (поэтому я хочу, чтобы он был в цепочке обратных вызовов), но он не заинтересован в результате входа в систему (если это не ошибка, которая все равно будет обрабатываться в цепочке ошибок). .
Что я здесь не так делаю?