2016-08-30 8 views
1

Я пытаюсь автоматизировать общие подключения telnet. Я сильно полагаюсь на REGEX для обработки различных подсказок для входа. В настоящее время я использую регулярное выражение [Ll]ogin, но подсказка вызывает у меня проблемы является стандартной Ubuntu запрос:Python telnetlib.expect() dot character '.' не работает как ожидалось

b-davis login: 
Password: 
Last login: Mon Aug 29 20:28:24 EDT 2016 from localhost on pts/5 

Поскольку слово Логин упоминается дважды. Теперь regex [Ll]ogin.{0,3}$ Я думал, что нужно решить эту проблему, но она перестала сопоставлять все вместе. Я попробовал что-то более простое, [Ll]ogin., которое должно давать те же результаты, что и [Ll]ogin, но это не так!

Я использую bytestrings, потому что python выбрасывает TypeError, если я этого не делаю. Я чувствую, что проблема лежит где-то не Regex связаны, поэтому здесь весь кусок кода:

import telnetlib 
import re 
pw = "[email protected]" 
user = "bdavis" 
regex = [ 
    b"[Ll]ogin.", # b"[Ll]ogin" works here 
    b"[Pp]assword", 
    b'>', 
    b'#'] 

tn = telnetlib.Telnet("1.2.3.4") 

while type(tn.get_socket()) is not int: 
    result = tn.expect(regex, 5) # Retrieve send information 
    s = result[2].decode() 

    if re.search("[Ll]ogin$",s) is not None: 
     print("Do login stuff") 
     print(result) 
     tn.write((user + "\n").encode()) # Send Username 
    elif re.search("[Pp]assword",s) is not None: 
     print("Do password stuff") 
     tn.write((pw + "\n").encode()) # Send Password 
    elif re.search('>',s) is not None: 
     print("Do Cisco User Stuff") 
     tn.write(b"exit\n") # exit telnet 
     tn.close() 
    elif re.search('#',s) is not None: 
     print("Do Cisco Admin Stuff") 
    else: 
     print("I Don't understand this, help me:") 
     print(s) 
     tn.close() 

ответ

0

Я думаю, следующую строку:

if re.search("[Ll]ogin$",s) is not None: 

следует заменить:

if re.search("[Ll]ogin", s) is not None: # NOTE: No `$` 

ИЛИ с использованием простых струнных операций:

if 'login' in s.lower(): 

, потому что согласованная часть не заканчивается ogin из-за :.

+0

Прошу прощения, это было последнее, и я сделал тип. Я знаю, что '' [Ll] ogin $ "' не будет работать, что я MEANT (и описывается в вопросе) заключается в том, что '' [Ll] ogin. "' Не работает. Точка должна представлять любой символ (кроме новой строки), но он не действует таким образом. – Rudedog9d

+0

Чтобы продолжить, в конечном итоге реализовано это регулярное выражение (если раздел 'if-elif'), потому что' Telnetlib.expect' не будет делать то, что мне нужно/ожидалось(). – Rudedog9d

+0

@ Rudedog9d, Вы пытались изменить, как я предложил в ответ (изменение 'if ..')? BTW, если вы просто хотите запустить команду, использование ssh будет проще. – falsetru

 Смежные вопросы

  • Нет связанных вопросов^_^