2017-01-16 4 views
0

J'utilise pexpect pour exécuter une série de commandes sur une machine distante et j'aimerais obtenir le statut de sortie de chaque commande. Toutefois, lorsque j'essaie de récupérer le statut de sortie, j'obtiens la valeur incorrecte. Est-il possible d'obtenir le bon état de sortie en utilisant pxssh de Pexpect? Voici le code que j'ai essayé avec la sortie. La commande a réussi, mais l'état de sortie donnée était de 255 au lieu de 0.Python Pexpect pxssh Obtention du statut de sortie

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) 

Sortie:

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

s exitstatus= 255 

Répondre

1

.exitstatus est l'état de sortie du processus ssh. Voir l'exemple suivant pour voir comment obtenir le statut de sortie d'une commande exécutée dans la session ssh:

>>> 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

Merci de répondre précisément à ma question. Une autre question de suivi est là pour imprimer seulement la sortie de la commande au lieu de la commande et de la sortie? – MBasith

+0

1) Vous pouvez analyser la chaîne à l'aide des fonctions Python; 2) Vous pouvez essayer 'sendline ('stty -echo')' avant d'envoyer d'autres commandes. Il n'est pas facile de coller un exemple de code dans les commentaires. Vous pouvez poser une nouvelle question. – pynexj