2016-10-08 9 views
1

Ich habe diesen Python3-Code, der Pexpect verwenden.pexpect nicht ausführen Befehl durch Schritte

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.") 

Mein Ziel ist:

  • SSH in den Wirt mit der ssh Funktion, erstellen Sie das Verzeichnis srakrnSRV, dann
  • eine Datei in das srakrnSRV Verzeichnis laden, die zuvor
  • erstellt
  • cd in srakrnSRV, und führen Sie den sendhw <filename> Befehl aus. Die filename Variable wird von Befehlszeilenparametern definiert und das Ergebnis ausgegeben.

Nach dem gesamten Code ausgeführt wird, druckt Python aus

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

, das nicht zu erwarten, da das Verzeichnis sollte vorher erstellt werden.

Ich habe auch versucht, manuell erstellen srakrnSRV Ordner in meinem Remote-Host. Nach dem Ausführen des Befehls scheint es, dass scp Funktion auch nicht ausgeführt wird. Der einzige laufende Pexpect Coomand war die letzte ssh Funktion.

Wie es in der Reihenfolge ausführen? Danke im Voraus!

Antwort

0

Möglicherweise fehlt Ihnen die Berechtigung zum Ausführen von Befehlen über ssh. Es besteht auch die Möglichkeit, dass Ihr Programm scp sendet, bevor eine Eingabeaufforderung erscheint.