2017-01-16 1 views
0

Ich verwende pexpect, um eine Reihe von Befehlen an einen Remote-Computer auszuführen und möchte den Exit-Status jedes Befehls abrufen. Wenn ich jedoch versuche, den Exit-Status abzurufen, erhalte ich den falschen Wert. Gibt es eine Möglichkeit, den richtigen Exit-Status mit PSSP von Pexpect zu erhalten? Hier ist der Code, den ich mit der Ausgabe versucht habe. Der Befehl war erfolgreich, aber die Exit-Status gegeben wurde 255 anstelle von 0.Python Pexpect pxssh Abrufen des Exit-Status

from pexpect import pxssh 

try: 
    s = pxssh.pxssh(timeout=30, maxread=2000000, options={ 
        "StrictHostKeyChecking": "no", 
        "UserKnownHostsFile": "/dev/null"}) 
    hostname = 'my_hostname' 
    username = 'username' 
    password = 'my_pass' 
    s.login (hostname, username, password, port=22, auto_prompt_reset=False) 
    s.PROMPT = '*$' 

    s.sendline('uptime') 
    s.prompt() 
    print(s.before.decode('utf-8')) 
    s.close() 
    print('s exitstatus=', s.exitstatus) 

except pxssh.ExceptionPxssh as e: 
    print("pxssh failed on login.") 
    print(e) 

Ausgang:

uptime 
09:10:39 up 10 days, 17:35, 4 users, load average: 0.12, 0.18, 0.16 

s exitstatus= 255 

Antwort

1

.exitstatus ist der Exit-Status des ssh Prozess. Sehen Sie folgendes Beispiel, um zu sehen, wie man den Exit-Status eines in der ssh-Sitzung ausgeführten Befehls erhält:

>>> ssh = pxssh.pxssh() 
>>> ssh.login('127.0.0.1', 'root', 'passwd') 
True 
>>> ssh.sendline('ls not-found') 
13 
>>> ssh.prompt() 
True 
>>> ssh.before 
'ls not-found\r\nls: cannot access not-found: No such file or directory\r\n' 
>>> ssh.sendline('echo $?') 
8 
>>> ssh.prompt() 
True 
>>> ssh.before 
'echo $?\r\n2\r\n' 
>>> ssh.before.split('\r\n')[1] 
'2'  <-- This is the ls command's exit status 
>>> 
+0

Vielen Dank, dass meine Frage präzise beantwortet. Eine weitere Folgefrage ist da ein Weg, nur die Ausgabe des Befehls anstelle von Befehl und Ausgabe zu drucken? – MBasith

+0

1) Sie können die Zeichenfolge mit Python-Funktionen analysieren; 2) Sie können 'sendline ('stty -echo')' versuchen, bevor Sie andere Befehle senden. Es ist nicht einfach, Beispielcode in die Kommentare einzufügen. Sie können eine neue Frage stellen. – pynexj

Verwandte Themen