Я пытаюсь автоматизировать общие подключения 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()
Прошу прощения, это было последнее, и я сделал тип. Я знаю, что '' [Ll] ogin $ "' не будет работать, что я MEANT (и описывается в вопросе) заключается в том, что '' [Ll] ogin. "' Не работает. Точка должна представлять любой символ (кроме новой строки), но он не действует таким образом. – Rudedog9d
Чтобы продолжить, в конечном итоге реализовано это регулярное выражение (если раздел 'if-elif'), потому что' Telnetlib.expect' не будет делать то, что мне нужно/ожидалось(). – Rudedog9d
@ Rudedog9d, Вы пытались изменить, как я предложил в ответ (изменение 'if ..')? BTW, если вы просто хотите запустить команду, использование ssh будет проще. – falsetru