Paramiko help - processing multiple commands

Frank Ruiz frank.ruiz at
Wed Jun 24 20:35:18 EDT 2009

Hi Jon,

Thanks for the reply. So there are no errors. Essentially everything
runs as planned. Sorry for being ignorant, but I am not sure if there
is another way for providing trace data. I will look into what other
debugging I can provide.

Essentially what happens is that only the second command gets
processed and the first is ignored.

As far as the global variables are concerned, I am not too sure what
the best way is to allow my variables to be seen by another sub. In
the script I am using optparse, however in order for the variables to
make any sense to my storagessh sub, I have to declare them as global,
since all the variables within my options sub have a local scope.

I am not too sure of a better way to do this. I don't like it much
either. Hopefully you can help me shed some light on this in terms of
best practice.

Normally I declare variable scope outside of my subroutines where required.

However since variable scope is local within a subroutine, seems like
I have to declare them global in order for the other subs to see it.

Anyhow.. your feedback has been much appreciated.. The script is still
a work in progress, so I plan to do so more cosmetic enhancements once
I review it a few more times.


On Wed, Jun 24, 2009 at 4:34 PM, Jon Clements<joncle at> wrote:
> On Jun 24, 11:22 pm, Frank Ruiz <frank.r... at> wrote:
>> Greetings,
>> I am trying to process multiple commands using paramiko. I have
>> searched other threads, and I think my use case is a little different.
>> I am trying to login to a storage node that has a special shell, and
>> as such I cant execute a script on the storage node side.
>> I am also trying to avoid using pexpect because I hate making system
>> calls.. hence my leaning towards paramiko.
>> Was hoping someone could help me identify a way to process multiple
>> commands using paramiko.
>> I have two commands listed below, however only one is getting processed.
>> Any help is much appreciated.
>> Thanks!
>> Here is my script:
>> #!/usr/bin/env python
>> #-Modules---------------------------------------------------------------------
>> import optparse
>> import sys
>> import paramiko
>> #-Variables-------------------------------------------------------------------
>> plog = 'storagessh.log'
>> suser = 'root'
>> #-Config----------------------------------------------------------------------
>> #-Subs-Defined----------------------------------------------------------------
>> def options():
>>     global hostname
>>     global goldenimage
>>     global lunclone
>>     global sshport
>>     usage = "usage: %prog [options] -n <nodename> -g <goldenimage> -l <lun>"
>>     parser = optparse.OptionParser(usage)
>>     parser.add_option("-n", "--node",
>>                       dest="hostname",
>>                       help="Name of storage node you are connecting to.")
>>     parser.add_option("-g", "--gold",
>>                       dest="goldenimage",
>>                       help="Name of goldenimage to clone.")
>>     parser.add_option("-l", "--lun",
>>                       dest="lunclone",
>>                       help="Name of lun to create.")
>>     parser.add_option("-p", "--port",
>>                       dest="sshport",
>>                       default=22,
>>                       help="SSH port number.")
>>     options, args = parser.parse_args()
>>     if not options.hostname:
>>         parser.error("Missing hostname argument.")
>>         exit
>>     elif not options.goldenimage:
>>         parser.error("Missing goldenimage argument.")
>>         exit
>>     elif not options.lunclone:
>>         parser.error("Missing lun argument.")
>>         exit
>>     hostname = options.hostname
>>     goldenimage = options.goldenimage
>>     lunclone = options.lunclone
>>     sshport = options.sshport
>> def storagessh():
>>     paramiko.util.log_to_file(plog)
>>     client = paramiko.SSHClient()
>>     client.load_system_host_keys()
>>     client.connect(hostname, sshport, suser)
>>     stdin, stdout, stderr = client.exec_command('show')
>>     stdin, stdout, stderr = client.exec_command('help')
>>     print
>>     client.close()
>> #--Initialization-------------------------------------------------------------
>> if __name__ == "__main__":
>>     options()
>>     storagessh()
> Again, as you were asked on the original post -- full tracebacks and
> explain "what is not working".
> The use of global variables scares me -- why are those needed?
> --

More information about the Python-list mailing list