[Twisted-Python] Executing a number of commands over SSH
James Brady
james at webmynd.com
Tue Jun 17 17:44:53 EDT 2008
> Indeed, a Deferred should help. You can have one which is fired
> with the
> SSHConnection once it is available. Then, callbacks on this
> Deferred will
> be able to start any commands they want. One way to do this would
> be to
> pass a Deferred all the way down into the SSHConnection and fire it
> with
> `self´ in `serviceStarted´. This basically turns control flow
> inside-out,
> allowing arbitrary code which is not part of the SSHConnection class
> to use
> the connection.
Hi Jean-Paul,
Thanks for that advice - as you suggested I'm now passing a Deferred
down into the SSHConnection to receive a reference to the connection
object, which works really well.
I now have a follow-on question. This is my situation: I'd like to set
up an SSHConnection and associate it with a Machine object at program
startup, then execute arbitrary commands over this SSHConnection at
run-time.
The problem I'm facing is that after instantiating the Twisted
objects, calling reactor.run() doesn't return, so I can't create a
standalone SSHConnection and attach it as a utility to a Machine object.
For example:
class Machine(object):
def __init__(self, address):
self.conn = MachineConnection(self, address, 'user')
class MachineConnection(object):
def __init__(self, address, user):
self.address = address
self.port = 22
self.user = user
d=defer.Deferred()
d.addCallback(self.__conn_ready)
d.addErrback(self.__conn_err)
factory = protocol.ClientFactory(self.user, d) # I'm actually
using a subclass
reactor.connectTCP(self.address, self.port, factory)
reactor.run()
Here, I've left out definitions of my conch subclasses, and methods on
Machine and MachineConnection, but I don't think they're relevant.
The issue is that reactor.run() in the last line of
MachineConnection.__init__ starts Twisted up, creates the connection
and so on, but doesn't return control to the original flow of code.
I've tried starting separate threads for the connections, but Twisted
seems to rely on running in the main thread.
Are the any suggestions on how to set up backgrounded Twisted
connections that can be interacted with as daemonic threads?
Thank you,
James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20080617/8d39b704/attachment.htm
More information about the Twisted-Python
mailing list