2016-10-08 4 views
1

У меня есть этот код Python3, который использует Pexpect.pexpect не выполняет команду по шагам

import pexpect 
import getpass 
import sys 

def ssh(username,password,host,port,command,writeline): 
    child = pexpect.spawn("ssh -p {} {}@{} '{}'".format(port,username,host,command)) 
    child.expect("password: ") 
    child.sendline(password) 
    if(writeline): 
     print(child.read()) 

def scp(username,password,host,port,file,dest): 
    child = pexpect.spawn("scp -P {} {} {}@{}:{}".format(port,file,username,host,dest)) 
    child.expect("password: ") 
    child.sendline(password) 

try: 
    filename = sys.argv[1] 
    print("=== sendhw remote commander ===") 
    username = input("Username: ") 
    password = getpass.getpass("Password: ") 
    ssh(username,password,"some.host.net","22","mkdir ~/srakrnSRV",False) 
    scp(username,password,"some.host.net","22",filename,"~/srakrnSRV") 
    ssh(username,password,"some.host.net","22","cd srakrnSRV && sendhw {}".format(filename),True) 

except IndexError: 
    print("No homework name specified.") 

Моя цель состоит в том, чтобы:

  • SSH в хост с функцией ssh, создайте каталог srakrnSRV, то
  • загрузить файл в srakrnSRV каталог, который ранее созданного
  • cd в srakrnSRV и выполнить команду sendhw <filename>. Переменная filename определяется параметрами командной строки и выводит результат.

После запуска всего кода, Python печатает

b'\r\nbash: line 0: cd: srakrnSRV: No such file or directory\r\n' 

, не ожидается, так как каталог должен быть предварительно создан.

Кроме того, я попытался вручную создать папку srakrnSRV на моем удаленном хосте. После повторного запуска команды появляется также, что функция scp также не работает. Единственной операцией pexpect coomand была последняя функция ssh.

Как его выполнить в порядке? Заранее спасибо!

ответ

0

У вас может не получиться разрешение на выполнение команд через ssh. Также есть вероятность, что ваша программа отправит scp перед вызовом.

Смежные вопросы