首页 > 编程问答 >python3如何使用‘pexpect’自动与串口交互?

python3如何使用‘pexpect’自动与串口交互?

时间:2024-08-08 16:16:17浏览次数:13  
标签:python windows pyserial pexpect

如何在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

相关文章

  • Python 熊猫迭代
    代码:#Importcarsdataimportpandasaspdcars=pd.read_csv('cars.csv',index_col=0)#Adaptforloopforlab,rowincars.iterrows():print(f"{[lab]}:{row['cars_per_cap']}")输出:['US']:809['A......
  • 【第九节】python中xml解析和json编解码
    目录一、PythonXML解析1.1什么是XML1.2Python对XML的解析方法1.3SAX解析xml1.4xml.dom解析xml1.6ElementTree解析XML二、Python编解码json2.1什么是json2.2使用json库2.3使用第三方库Demjson一、PythonXML解析1.1什么是XML        XML,......
  • 从 python 设置运算符符号到方法名称的映射是什么?它们与文档不匹配
    我创建了自己的Customset类,它实现了python集合的几乎所有方法。当我使用此自定义集的实例时,许多集合运算符都会失败。它们会失败,并显示类似以下内容的内容:TypeError:unsupportedoperandtype(s)for-:'Customset'andCustomset'orTypeError:'<='......
  • Windows 11 搜索要点功能,删除搜索广告
    点击搜索设置关闭要点搜索使用Windows+R快捷键打开「运行」对话框,执行gpedit.msc打开组策略编辑器。依次展开「计算机配置」>「管理模板」>「Windows组件」>「搜索」。在右侧面板中找到并双击「允许搜索要点」策略。根据需要,选择「已启用」或「已禁用」,然后点击「......
  • 21.python函数(return)
    return一、return语句1、return是指定一个返回值2、在python中创建一个函数,可以用return语句指定返回的的值,这个返回值可以是任意的类型3、return语句在同一个函数中可以出现多次,但是只有有一个得到执行,就会直接结束函数的执行。return后面的语句不执行了4、return的格式re......
  • 【Python代码】如何根据出生日期计算出年龄?
    哈喽,大家好,木易巷来啦!假设我们有一个包含出生日期的Excel文件,需要计算每个人的年龄,你会怎么做呢?具体情况如下图:今天木易巷分享通过Python及其强大的pandas库,来实现从Excel文件中读取日期数据,计算年龄,并将结果存储回Excel文件中的过程。话不多说,开干!▍1、环境准备在开......
  • Windows10下多版本CUDA的安装与切换
    文章目录一、前言二、安装CUDA1.确定是否支持所需的CUDA版本2.下载CUDA3.安装CUDA4.环境变量三、安装cudnn1.下载cudnn2.替换文件四、切换CUDA版本1.切换版本2.检查版本是否切换成功参考一、前言  当我们跑深度学习的代码时,有时......
  • python 无法解密重音字符(如 è),我该怎么办?
    我正在解决这个ctf,您必须使用PyCryptodome模块通过DES加密消息。消息是“Launghezzadiquestafrasenonèdivisibileper8”(意大利语)。我无法将此消息转换为字节,因为重音字符不包含在utf-8中(我认为这就是解释)。有人可以帮我加密消息吗?fromCrypto.Util.Paddingimp......
  • Python笔记
    Python1变量1、什么是变量变量是关联一个对象的标识符变量可以绑定一个对象,并可以通过变量名使用这个对象2、变量的命名方法:以字母或下划线开头,后面跟字母、下划线或者数字3、python中的关键字不能用作变量名4、变量无类型,对象有类型5、在交互模式下查看当前作用域内的......
  • 如何在python中使用jdbc jar文件连接informix数据库
    有什么想法如何使用jdbcjar文件连接到informix数据库吗?在python我尝试了jaydebeapi,当我执行时:conn=jaydebeapi.connect('com.informix.jdbc.IfxDriver',myurl,['user','pass'],jdbc_driver_path)...然后从表中选择数据的其余代码当我执行myscript.py它只......