2016-04-05 6 views
1

Ich versuche paramiko ein Skript auf externen Computer ausführen und beenden, aber Probleme, damit es das Skript ausführen. Weiß jemand, warum das Skript nicht ausgeführt wird? Ich habe versucht, das Befehlshandbuch auf der VM auszuführen und das hat funktioniert.Paramiko Skript ausführen und beenden

command = "/home/test.sh > /dev/null 2>&1 &" 

def start_job(host): 

    try: 
     client = paramiko.SSHClient() 
     client.load_system_host_keys() 
     client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 

     client.connect(hostname, port=22, username=username, password=password) 
     return client.exec_command(command) 

    finally: 
     client.close() 

start_job(hostname) 

Antwort

1

Zunächst gibt es ein Tippfehler in der start_job Funktion entweder auf dem Argument oder der 1. param zu client.connect(). Darüber hinaus kehren nur die stdout/stderr Inhalt vor dem Schließen der Verbindung:

def start_job(hostname): 

try: 
    client = paramiko.SSHClient() 
    client.load_system_host_keys() 
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 

    client.connect(hostname, port=22, username=username, password=password) 
    (_, stdout, stderr) = client.exec_command(command) 
    return (stdout.read(), stderr.read()) 

finally: 
    client.close() 

In Ihrem Fall wird der Befehl stderr nach stdout umgeleitet und im Hintergrund laufen, damit ich nicht nur zwei leere Strings erwarten zurück zurück:

start_job(hostname) 
('', '')