import paramiko
import sys
import argparse

def sendrcv(client,command,stdout_data,stderr_data):
    nbytes = 4096
    session = client.open_channel(kind='session')
    session.exec_command(command)
    while True:
        if session.recv_ready():
            stdout_data.append(session.recv(nbytes))
        if session.recv_stderr_ready():
            stderr_data.append(session.recv_stderr(nbytes))
        if session.exit_status_ready():
            break

    print 'exit status: ', session.recv_exit_status()
    print ''.join(stdout_data)
    print ''.join(stderr_data)
    session.close()
    
def main(hostname,port,username,password,command):
##    hostname = '172.31.10.100'
##    port = 22
##    username = 'pi' 
##    password = 'raspberry'
##    command = 'ls'

    client = paramiko.Transport((hostname, port))
    client.connect(username=username, password=password)
    stdout_data = []
    stderr_data = []
    if(command==""):
        while True:
            try:
                command = raw_input('cmd:')
                if command == '':
                    break
            except EOFError:
                break
            sendrcv(client,command,stdout_data,stderr_data)
            stdout_data = []
            stderr_data = []
    else:    
        sendrcv(client,command,stdout_data,stderr_data)
    client.close()


if __name__ == "__main__" :
    parser = argparse.ArgumentParser()
    parser.add_argument("--ip", type=str, default="127.0.0.1",
                        help="Host ip address.")
    parser.add_argument("--port", type=int, default=22,
                        help="Host port number.")
    parser.add_argument("--user", type=str, default="",
                        help="User Name")
    parser.add_argument("--pwd", type=str, default="",
                        help="Password")
    parser.add_argument("--cmd", type=str, default="",
                        help="Remote command")

    args = parser.parse_args()

    main(args.ip, args.port, args.user, args.pwd, args.cmd)
