Невозможно получить вывод с удаленного сервера

tcsh] jthimmai@musxoile24:~/jthimmai> cat monitor.py 

import pexpect, sys
child = pexpect.spawn ('ssh -l jthimmai musxoile24')
i = child.expect (['Terminal type', '[#\:] '])
if i==0:
    print'Login OK... need to send terminal type.'
    child.sendline('vt100')
    child.expect('[#\:] ')
elif i==1:
    print'Login OK.'
    print'Shell command prompt', child.after,child.before
    child.sendline('uname -a')
    #child.sendline('ls -lrt ')
    child.expect('[#\:]')
    print child.before
[Linux]                                                                                                                                                      [tcsh] jthimmai@musxoile24:~/jthimmai> 
tcsh] jthimmai@musxoile24:~/jthimmai> /opt/python_2.7.2/bin/python monitor.py
Login OK.
Shell command prompt :  Last login
Fri Mar 13 07
[Linux]                                                                                                                                                      [tcsh] jthimmai@musxoile24:~/jthimmai>

1 ответ

Если ваше "приветственное сообщение" совпадает с моим, в нем есть двоеточия - и вы ищете подсказку с шаблоном, который соответствует двоеточию.

Вот почему child.before печать Fri Mar 13 07 - потому что приветственное сообщение что-то вроде:

Last login: Fri Mar 13 02:44:19 2015 from somehost.somedomain
                         ^

Вы можете изменить свой шаблон внутри оператора if, чтобы включить пробел (как вы делали ранее)

prompt = '[#\:] '      # At the beginning, so you don't have to type it every time
#...

child.expect('[#\:]')  # This is inside your elif i==1 block
# to
child.expect(prompt)

Который должен помочь.

Другие вопросы по тегам