Я пытаюсь автоматизировать функцию входа в систему для устройства, с которым я общаюсь через serial
.Чтобы получить приглашение login:
, я должен нажать клавишу enter во время загрузки устройства, а затем через некоторое время появится приглашение login:
, когда программа обнаружит строку 'login:', введите имя пользователя (или, по крайней мере,это план).После ввода правильного имени пользователя появится приглашение Password:
, если я введу правильный пароль, я успешно войду в устройство, если я введу неправильный пароль, мне придется начать заново (что означает повторное ввод имени пользователя).Также, если мне не удается войти в систему, попробуйте login:
изменить приглашение на username:
.
Я сделал это до сих пор, но
import serial
import re
from time import sleep
import time
ser = serial.Serial('COM3', timeout=1)
ser.baudrate = 115200
def auto_login():
while True:
output = ser.read(10000).decode('utf-8', 'ignore')
testmode_command = ser.write("\r\n".encode())
print(output)
if "1 : press [Enter] for test mode / [Esc+Enter] for plain Linux" in output:
ser.write(testmode_command)
if " login:" in output:
break
def login_repeat():
login = b"root \r\n"
output = ser.read(10000).decode('utf-8', 'ignore')
print(output)
if " login:" in output:
ser.write(login)
if "Username:" in output:
ser.write(login)
def pass_word():
password = b"p \r\n"
time.sleep(0.1)
output = ser.read(10000).decode('utf-8', 'ignore')
print(output)
if "Password:" in output:
ser.write(password)
Результатом я являюсьПолучение:
Login incorrect
Username:
root
System starting up, please try later
Login incorrect
Username:
root
По какой-то причине мне кажется, что ввод посылается сначала команда \r\n
вместо имени пользователя, а затем команда.Есть идеи, как решить эту проблему?