python判定串口已连接_python:检测windows上某串口(COM口)是否存在和被占用

程序汇总经常用到串口,所以在使用脚本过程中难免会出现想要使用的串口被其他程序占用的情况,然后导致程序异常等问题,所以今天就搜索了一圈,然后写了一个逻辑来解决这个问题。

解决办法

首先是我查找到一个模块:serial.tools.list_ports, 可以使用这个模块里面的一些方法直接列出来电脑上面的com口。

original_comports_list = list(serial.tools.list_ports.comports())

这边列出来的是指定串口的一些内部信息,需要经过一些处理才能拿到像COM1这样的值,所以,程序如下:

comport_list = []

occupied_comport =[]

original_comports_list = list(serial.tools.list_ports.comports())

# print(original_comports_list)

if original_comports_list is not None:

for i in range(len(original_comports_list)):

comports = str(original_comports_list[i]).split('-')  #split一下会得到COMX这样的信息

comport_list.append(comports[0])

else:

print("no comports")

print(comport_list)

以上程序列出来的就是电脑上连接的COM口信息,通过以下的程序去判断串口是否被占用:

if len(comport_list) > 1: # 需要不止包含com1

for comport in comport_list:

try:

s = serial.Serial(

comport, baudrate="9600", timeout=0.8) #尝试去创建串口类,如果串口没有被占用,则可以正常创建类,如果被其他程序占用的话,就会抛出异常

s.close()

result.append(comport)

except (OSError, serial.SerialException):

occupied_comport.append(comport) #如果发生了异常,就把当前的异常的保存下来,这样就可以得到被占用的口

pass

结合以上两部分程序(列出所有连接在电脑上的串口和创建类serial类的程序),就可以获得两个list,如果需要整理出具体的COM口,可以再进行遍历:

for comport in comport_list_you_want_to_check:

comport = comport.upper()  # 调整完为uppercase

if comport + ' ' not in comport_list: #comport_list为连接在电脑的COM口列表

print("PORT ERROR:{} is not connected to this computer".format(comport))

disconnected_comports.append(comport)

else:

try:

s = serial.Serial(

comport, baudrate="115200", timeout=0.8)

s.close()

except (OSError, serial.SerialException):

occupied_comport.append(comport)

pass

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值