Paramiko help - processing multiple commands

Frank Ruiz frank.ruiz at gmail.com
Wed Jun 24 18:22:02 EDT 2009


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()



More information about the Python-list mailing list