通过串行通讯自动执行登录操作

罗扎科斯

我正在尝试自动通过进行通信的设备的登录功能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命令而不是用户名,然后发送命令。任何想法如何解决这个问题?

迪泽

time.sleep(0.1)在发送命令之前,添加,如下所示:

time.sleep(0.1)
ser.write(b"root")
time.sleep(0.1)
ser.write('\r'.encode())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章