On Thu, May 08, 2003 at 12:23:18PM -0400, Itamar Shtull-Trauring wrote:
On 08 May 2003 10:10:58 +0200 Thomas Heller <theller@python.net> wrote:
I have this snippet running in it's own thread, and would like to port it to twisted, my program is using it anyway. Any hints how to get started?
I'm not sure if telnet is symmetric - if it isn't, looks like we don't have telnet client code. Even if it is, the current code needs work in order to be usable for what you want (it's one of the more ancient parts of Twisted.)
Telnet is mostly symmetric. The existing code isn't very client-friendly, though. Here's a kinda-sorta example (untested): from twisted.protocols import telnet from twisted.internet import protocol, reactor class RebootTheServer(telnet.Telnet): mode = 'WaitForUser' def connectionMade(self): # Only defined to keep parent from sending the welcome banner pass def telnet_WaitForUser(self, line): if line.startswith('Username: '): self.write(self.factory.username + '\r\n') return 'WaitForPassword' def telnet_WaitForPassword(self, line): if line.startswith('Password: '): self.write(self.factory.password + '\r\n') # Instead of this, you could do another state, # like "WaitForPrompt" or something. reactor.callLater(1, self.reboot) return 'Idling' def telnet_Idling(self, line): # La la la. pass def reboot(self): self.write('reboot\r\n') # This will make us lose our connection after the next # line is received. To lose it faster, use # self.transport.loseConnection() instead self.mode = 'Done' def connectionLost(self, reason): if self.mode != 'Done': reason.printTraceback() reactor.stop() f = protocol.ClientFactory() f.protocol = RebootTheServer f.password = 'password' f.username = 'username' # fill in host and port reactor.connectTCP(host, port, f) # Let's go reactor.run() This is the first expect-y thing I've written with Telnet, so maybe it's not the best solution, but hopefully it gets you on the right track. Jp -- #!/bin/bash ( LIST=(~/.sigs/*.sig) cat ${LIST[$(($RANDOM % ${#LIST[*]}))]} echo -- $'\n' `uptime | sed -e 's/.*m//'` ) > ~/.signature -- up 6 days, 16:38, 10 users, load average: 0.07, 0.06, 0.00