import tempfile, pexpect

def scp(src_name, dest_name, host, user, password, timeout=30, bg_run=False):
    """SSH'es to a host using the supplied credentials and executes a command.
    Throws an exception if the command doesn't return 0.
    bgrun: run command in the background"""

    fname = tempfile.mktemp()
    fout = open(fname, 'w')

    options = '-q -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oPubkeyAuthentication=no'
    if bg_run:
        options += ' -f'
    scp_cmd = 'scp %s %s@%s:%s' % (src_name, user, host, dest_name)
    child = pexpect.spawn(scp_cmd, timeout=timeout, encoding='UTF-8')
    child.expect(['password: '])
    child.sendline(password)
    child.logfile = fout
    
    child.expect(pexpect.EOF)


    # We expect any of these three patterns...
    #i = child.expect (['Permission denied', 'Terminal type', '[#\$] '])
    #if i==0:
    #    print('Permission denied on host. Can\'t login')
    #    child.kill(0)
    #elif i==1:
    #    print('Login OK... need to send terminal type.')
    #    child.sendline('vt100')
    #    child.expect('[#\$] ')
    #elif i==2:
    #    print('Login OK.')
    #    print('Shell command prompt', child.after)

    child.close()
    fout.close()

    fin = open(fname, 'r')
    stdout = fin.read()
    fin.close()

    if 0 != child.exitstatus:
        raise Exception(stdout)
    return stdout
