2017-01-16 12 views
0

Я использую pexpect для запуска ряда команд на удаленную машину и хотел бы получить статус выхода каждой команды. Однако, когда я пытаюсь получить статус выхода, я получаю неправильное значение. Есть ли способ получить правильный статус выхода с помощью pxssh из Pexpect? Вот код, который я пробовал вместе с выходом. Команда прошла успешно, но состояние выхода дано было 255 вместо 0.Python Pexpect pxssh Получение статуса выхода

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) 

Выход:

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

s exitstatus= 255 

ответ

1

.exitstatus является статус выхода ssh процесса. См. Следующий пример, чтобы узнать, как получить статус выхода из командной строки в сеансе 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

Спасибо, что точно ответил на мой вопрос. Еще один вопрос о последующих действиях заключается в том, что вам нужно распечатать только вывод команды вместо команды и вывода? – MBasith

+0

1) Вы можете разобрать строку, используя функции Python; 2) Вы можете попробовать 'sendline ('stty -echo')' перед отправкой других команд. Не так просто вставить примерный код в комментарии. Вы можете задать новый вопрос. – pynexj