python的pyserial读取串口占用状态?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的pyserial读取串口占用状态?相关的知识,希望对你有一定的参考价值。

小弟是python新手,想写一个简单串口读取/发送的界面,
使用了pyserial之后,使用serial.tools.list_ports.comports()已经能够读取到所有的串口,但是我想从这些串口中筛选出处于限制状态下的口,然后加到available_list中,也就是说如果有com1/com2/com3,但是com3被一个别的程序正在使用,我要能够识别出来,在list中只保留com1/com2。
但是我网上搜了一大圈,发现都是使用 ser = serial.Serial(com1,9600,timeout = 60),然后再if(ser.isopen())来判断的,我认为这样的话就已经改变了这个串口的状态了,不知道有没有什么方法在不改变串口状态的情况下直接读取出某一个串口是不是被使用。
谢谢。

参考技术A 那么你干嘛要获取可用端口呢?
如果不可用,你强行去打开,是会出错的,所以自然知道需要换了追问

如题目里问的,想知道所有可用的口,以便于后面给用户选择。
过滤掉哪些已经在使用中的串口

追答

不熟悉python的库
如果是C# 本身又isopen属性
还有系统调用:
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern SafeFileHandle CreateFile(string lpFileName, int dwDesiredAccess, int dwShareMode, IntPtr securityAttrs, int dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile);

SafeFileHandle hFile = CreateFile(@"\\.\" + portName, -1073741824, 0, IntPtr.Zero, 3, dwFlagsAndAttributes, IntPtr.Zero);
if (hFile.IsInvalid)
//已经占用

使用pyserial测试usb到串口到usb没有输出

【中文标题】使用pyserial测试usb到串口到usb没有输出【英文标题】:testing usb to serial to usb using pyserial has no output 【发布时间】:2020-01-28 15:43:00 【问题描述】:

我正在尝试使用 pyserial 测试将消息写入串行端口并使用连接回 vack“USB-Serial --> Serial-USB”的两个 USB 到串行适配器再次读取它,以验证它正在写入串行端口因为它用于与硬件通信, 所以我有打开的控制台女巫一直在阅读

import serial

port = 'COM6'
read_ser = serial.Serial(port)

while True:
  x=read_ser.read()
  print(x)

为了写作,我使用

import serial

port = 'COM5'
ser = serial.Serial(port)
# ser.write(str.encode('$GPRMC,081117.24,A,5042.988302,N,1058.376556,E,14.7,,230813,0.0,E*74'))
ser.write('$GPRMC,081117.24,A,5042.988302,N,1058.376556,E,14.7,,230813,0.0,E*74'.encode())

阅读控制台中没有显示任何内容 我尝试了两个适配器并成功从外部串行硬件读取。

我在 Windows 10 上使用 python 3.7

【问题讨论】:

【参考方案1】:

我想通了 问题出在引脚布局上,因为我使用性别转换器连接两个串行适配器 改用串口线解决了这个问题。

【讨论】:

以上是关于python的pyserial读取串口占用状态?的主要内容,如果未能解决你的问题,请参考以下文章

从两个串口异步读取

在 Windows XP 上使用 pyserial 模块从串口 (COM3) 读取数据

Python PySerial,如何打开串口?

转:Python通过pyserial控制串口操作

有人会 用python的 pySerial 进行串口通信的吗

python的pyserial模块