Paramiko help - processing multiple commands

Jon Clements joncle at googlemail.com
Wed Jun 24 19:34:41 EDT 2009


On Jun 24, 11:22 pm, Frank Ruiz <frank.r... at gmail.com> 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 stdout.read()
>     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