<br><font size=2 face="sans-serif">Raul,</font>
<br>
<br><font size=2 face="sans-serif">This is simply some work-in-progress
code, but is basically what you are looking for even written for PythonCard.
This takes a list of three commands and runs them in the order given using
deferreds to wait for the previous to complete before executing the next.</font>
<br>
<br><font size=2 face="sans-serif">This took me about forever to get it
this far. If you make and significant improvements, please share.</font>
<br>
<br><font size=2 face="sans-serif">One remaining mystery is how to switch
users once logged in. For example, I need to run some things as root.</font>
<br>
<br><font size=2 face="sans-serif">Paul</font>
<br>
<br><font size=2 face="sans-serif">============================================</font>
<br><font size=2 face="sans-serif">from twisted.conch import error</font>
<br><font size=2 face="sans-serif">from twisted.conch.ssh import transport,
connection, keys, userauth, channel, common</font>
<br><font size=2 face="sans-serif">from twisted.internet import defer,
protocol, reactor</font>
<br><font size=2 face="sans-serif">import sys, getpass, os, string</font>
<br>
<br><font size=2 face="sans-serif">from PythonCard import model, twistedModel</font>
<br>
<br>
<br><font size=2 face="sans-serif">class ClientCommandTransport(transport.SSHClientTransport):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def __init__(self, username,
password, cmds, caller):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.username
= username</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.password
= password</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.cmds
= cmds</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.caller
= caller</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def verifyHostKey(self,
pubKey, fingerprint):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; # in a real
app, you should verify that the fingerprint matches</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; # the one
you expected to get from this server</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; return defer.succeed(True)</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def connectionSecure(self):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.requestService(PasswordAuth(self.username,
self.password, ClientConnection(self.cmds, self.caller)))</font>
<br>
<br><font size=2 face="sans-serif">class PasswordAuth(userauth.SSHUserAuthClient):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def __init__(self, user,
password, connection):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; userauth.SSHUserAuthClient.__init__(self,
user, connection)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.password
= password</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def getPassword(self,
prompt=None):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; return defer.succeed(self.password)</font>
<br>
<br><font size=2 face="sans-serif">class ClientConnection(connection.SSHConnection):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def __init__(self, cmds,
caller, *args, **kwargs):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; connection.SSHConnection.__init__(self)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.cmds
= cmds</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.caller
= caller</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; #======================</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def serviceStarted(self):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d =
defer.Deferred()</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d.addCallback(self._cbFirst)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d.addErrback(self._ebFirst)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.openChannel(CommandChannel(self.cmds[0],
lastcmd=0, conn=self))</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def _cbFirst(self, result):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; print 'CALLBACK
Result 1:', result</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.caller.responses.append(result.rstrip())</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d =
defer.Deferred()</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d.addCallback(self._cbSecond)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d.addErrback(self._ebSecond)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.openChannel(CommandChannel(self.cmds[1],
lastcmd=0, conn=self))</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def _ebFirst(self, f):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.caller.responses.append(None)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; print &quot;Error
1&quot;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d =
defer.Deferred()</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d.addCallback(self._cbSecond)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d.addErrback(self._ebSecond)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.openChannel(CommandChannel(self.cmds[1],
lastcmd=0, conn=self))</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; #log.err()</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def _cbSecond(self, result):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; print 'CALLBACK
Result 2:', result</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.caller.responses.append(result.rstrip())</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d =
defer.Deferred()</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d.addCallback(self._cbThird)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d.addErrback(self._ebThird)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.openChannel(CommandChannel(self.cmds[2],
lastcmd=1, conn=self))</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def _ebSecond(self, f):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.caller.responses.append(None)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d =
defer.Deferred()</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d.addCallback(self._cbThird)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.d.addErrback(self._ebThird)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.openChannel(CommandChannel(self.cmds[2],
lastcmd=1, conn=self))</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; #log.err()</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def _cbThird(self, result):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.caller.responses.append(result.rstrip())</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; print 'CALLBACK
Result 3:', result</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; #reactor.stop()</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def _ebThird(self, f):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.caller.responses.append(None)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; log.err()</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; #reactor.stop()</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; #======================</font>
<br>
<br><font size=2 face="sans-serif">class CommandChannel(channel.SSHChannel):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; name = 'session'</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def __init__(self, command,
lastcmd, *args, **kwargs):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; channel.SSHChannel.__init__(self,
*args, **kwargs)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.command
= command</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.lastcmd
= lastcmd</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.data
= &quot;&quot;</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def channelOpen(self,
data):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.conn.sendRequest(self,
'exec', common.NS(self.command), wantReply=True).addCallback(self._gotResponse)</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def _gotResponse(self,
_):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; #print &quot;RESPONSE&quot;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.conn.sendEOF(self)</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def dataReceived(self,
data):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; #print &quot;Data
Received:&quot;, data</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.data
+= data</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def closed(self):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.conn.d.callback(self.data)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.loseConnection()</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; ## &nbsp;
&nbsp; &nbsp; &nbsp;if self.lastcmd:</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; ## &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;print &quot;closing reactor.&quot;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; ## &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;reactor.stop()</font>
<br>
<br><font size=2 face="sans-serif">class ClientCommandFactory(protocol.ClientFactory):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def __init__(self, username,
password, cmds, caller):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.username
= username</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.password
= password</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.cmds
= cmds</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.caller
= caller</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def buildProtocol(self,
addr):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; protocol
= ClientCommandTransport(self.username, self.password, self.cmds, self.caller)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; return protocol</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; </font>
<br><font size=2 face="sans-serif">class SSH():</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &quot;&quot;&quot; Contains
a SSH connection, runs commands, and stores results. &quot;&quot;&quot;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def __init__(self, host,
username, password, cmds):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.host
= host</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.username
= username</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.password
= password</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.cmds
= cmds</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.responses
= []</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.run_commands()</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def run_commands(self):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; factory
= ClientCommandFactory(self.username, self.password, self.cmds, self)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; reactor.connectTCP(self.host,
22, factory)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; #reactor.registerWxApp(app)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; #reactor.run()</font>
<br>
<br>
<br>
<br><font size=2 face="sans-serif">#from PythonCard import model</font>
<br>
<br><font size=2 face="sans-serif">class Dashboard(model.Background):</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def on_initialize(self,
event):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.responses
= []</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def on_btSend_mouseClick(self,
event):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; print &quot;Hello
World!&quot;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.run_commands(&quot;myhost&quot;,
&quot;myusername&quot;, &quot;mypassword&quot;, [&quot;id&quot;, &quot;pwd&quot;,
&quot;ls -l&quot;])</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; #for i,
response in enumerate(self.ssh.responses):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; # &nbsp;
&nbsp;print i, response</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; # &nbsp;
&nbsp;print &quot;=&quot; * 25</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def on_btCheck_mouseClick(self,
event):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;
Check it out! &quot;&quot;&quot;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; for i, response
in enumerate(self.responses):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
print i, response</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
print &quot;=&quot; * 25</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; print &quot;Done.&quot;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &quot;&quot;&quot; Contains
a SSH connection, runs commands, and stores results. &quot;&quot;&quot;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; #def __init__(self, host,
username, password, cmds):</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; def run_commands(self,
host, username, password, cmds):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.host
= host</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.username
= username</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.password
= password</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.cmds
= cmds</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.responses
= []</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; </font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; self.factory
= ClientCommandFactory(self.username, self.password, self.cmds, self)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; reactor.connectTCP(self.host,
22, self.factory)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; #reactor.run()</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; for i, response
in enumerate(self.responses):</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
print i, response</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
print &quot;=&quot; * 25</font>
<br>
<br><font size=2 face="sans-serif">#print &quot;\nDone.&quot;</font>
<br>
<br><font size=2 face="sans-serif">if __name__ == '__main__':</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; app = twistedModel.TwistedApplication(Dashboard)</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; app.MainLoop()</font>
<br><font size=2 face="sans-serif"><br>
</font>
<br><font size=2 face="sans-serif">Here's the PythonCard resource file:</font>
<br>
<br><font size=2 face="sans-serif">{'application':{'type':'Application',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'name':'Minimal',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'backgrounds': [</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; {'type':'Background',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'name':'bgMin',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'title':'Minimal
PythonCard Application',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'size':(382,
271),</font>
<br>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; 'menubar':
{'type':'MenuBar',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'menus':
[</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;{'type':'Menu',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;'name':'menuFile',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;'label':'&amp;File',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;'items': [</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; {'type':'MenuItem',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;'name':'menuFileExit',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;'label':'E&amp;xit\tAlt+X',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp;'command':'exit',</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; },</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; ]</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;},</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;]</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp;},</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'components':
[</font>
<br>
<br><font size=2 face="sans-serif">{'type':'Button', </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'name':'btCheck', </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'position':(210, 186),
</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'label':u'Check', </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; },</font>
<br>
<br><font size=2 face="sans-serif">{'type':'Button', </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'name':'btSend', </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'position':(102, 185),
</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'label':u'Send', </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; },</font>
<br>
<br><font size=2 face="sans-serif">{'type':'CodeEditor', </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'name':'ceReponse', </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'position':(6, 33), </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'size':(360, 141), </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'backgroundColor':(255,
255, 255, 255), </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; },</font>
<br>
<br><font size=2 face="sans-serif">{'type':'TextField', </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'name':'field1', </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'position':(5, 5), </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'size':(150, -1), </font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; 'text':u'Hello PythonCard',
</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; },</font>
<br>
<br><font size=2 face="sans-serif">] # end components</font>
<br><font size=2 face="sans-serif">} # end background</font>
<br><font size=2 face="sans-serif">] # end backgrounds</font>
<br><font size=2 face="sans-serif">} }</font>
<br>
<br>
<br><tt><font size=2>twisted-python-bounces@twistedmatrix.com wrote on
10/07/2007 01:04:56 PM:<br>
<br>
&gt; Hi list, this is my first post :p<br>
&gt; <br>
&gt; I'm new to Twisted/Conch and I was wondering how can I modify the
<br>
&gt; sshsimpleclient.py in order to run several commands, on a user <br>
&gt; request mode, without the need to authenticate just before every <br>
&gt; command, just like a normal interactive ssh session. This is for a
<br>
&gt; GUI front end I'm writing (PythonCard) that will execute some <br>
&gt; benchmarks on a remote server. <br>
&gt; <br>
&gt; Thanks in advance...<br>
&gt; <br>
&gt; Raul_______________________________________________<br>
&gt; Twisted-Python mailing list<br>
&gt; Twisted-Python@twistedmatrix.com<br>
&gt; http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python<br>
</font></tt>