如何在Windows中使用python'pexpect'自动与串口(例如:COM3)交互并在开机时通过串口登录嵌入式开发板时输入用户密码?
ser = serial.Serial(port=serial_port, baudrate=baudrate, bytesize=bytesize, parity=parity, stopbits=stopbits, timeout=timeout)
channel = pexpect.fdpexpect.fdspawn(ser.fileno(), timeout=180)
** 异常:fileno ** fileno 似乎有问题
(python 3.11)
我尝试用 pexpect 操作这个串口,但没有成功,想知道是否有另一种方法可以自动与串口交互,比如自动输入一个串口登录密码
很抱歉,
pexpect
主要设计用于与类似终端的程序交互,它依赖于
pty
(pseudo-terminal) 机制,而串口通信 (
serial
) 并不提供这样的机制。因此,直接将
pexpect.fdpexpect.fdspawn
用于串口对象是行不通的。
要在 Windows 中使用 Python 自动与串口交互并登录嵌入式开发板,可以尝试以下方法:
1. 使用
serial
模块直接发送命令和接收响应:
import serial
import time
serial_port = 'COM3' # 替换为你的串口号
baudrate = 115200
timeout = 1
def send_command(ser, command, delay=0.5):
"""发送命令并返回响应"""
ser.write((command + '\n').encode()) # 发送命令,注意换行符
time.sleep(delay) # 等待响应
return ser.read(ser.in_waiting).decode() # 读取并解码响应
with serial.Serial(serial_port, baudrate, timeout=timeout) as ser:
# 发送登录用户名
response = send_command(ser, 'root')
print(response)
# 发送密码
response = send_command(ser, 'your_password')
print(response)
# 发送其他命令...
response = send_command(ser, 'ls -l')
print(response)
2. 使用
expect
模块 (需要安装
pywin32
):
import serial
import time
import expect
serial_port = 'COM3' # 替换为你的串口号
baudrate = 115200
timeout = 1
# 创建 Expect 对象
exp = expect.spawn('python -m serial.tools.miniterm %s %d' % (serial_port, baudrate))
# 等待登录提示符
exp.expect("login:")
exp.sendline("root")
# 等待密码提示符
exp.expect("Password:")
exp.sendline("your_password")
# 发送其他命令...
exp.sendline("ls -l")
print(exp.before) # 打印命令输出
exp.close()
注意事项:
-
将
COM3
、root
和your_password
替换为你的实际串口号、用户名和密码。 -
你可能需要根据你的嵌入式开发板的启动时间调整代码中的延迟时间 (
time.sleep
)。 -
确保你的 Python 环境中已经安装了
pyserial
和pywin32
模块。
希望这些方法能够帮助你实现自动登录你的嵌入式开发板。
标签:python,windows,pyserial,pexpect From: 78847251