使用python连续读取/监视串行端口(如果端口未打开,则连续运行脚本)

使用python连续读取/监视串行端口(如果端口未打开,则连续运行脚本),python,pyserial,Python,Pyserial,我是python和串口的新手。我想连续监视串行端口。如果端口未打开或访问被拒绝,则需要不停止地运行python脚本。 我做了一些事情,但当端口未打开或访问被拒绝时,该脚本已停止。请帮助某人解决此问题 import serial z1baudrate = 9600 z1port = 'COM4' z1serial = serial.Serial(port=z1port, baudrate=z1baudrate,timeout=1) try: if z1serial.is_open:

我是python和串口的新手。我想连续监视串行端口。如果端口未打开或访问被拒绝,则需要不停止地运行python脚本。 我做了一些事情,但当端口未打开或访问被拒绝时,该脚本已停止。请帮助某人解决此问题

import serial
z1baudrate = 9600
z1port = 'COM4'
z1serial = serial.Serial(port=z1port, baudrate=z1baudrate,timeout=1)
try:
   if z1serial.is_open:
      while True:           
        size = z1serial.inWaiting()                   
        if size:                
            data = z1serial.read(size)                                                  
            res= data.decode("utf-8")   
            print(res)      
        else:
            print("Data not reading")
       time.sleep(1)
  else:
    z1serial.close()
    print('z1serial not open or Already in use')
except serial.SerialException as e:
  z1serial.close()
  print('COM4 not open')

您需要将
z1serial
赋值包含在
try
块中

导入序列号
导入时间
Z1波特率=9600
z1端口='COM4'
尽管如此:
尝试:
z1serial=serial.serial(端口=z1port,波特率=z1baudrate,超时=1)
如果z1serial.u打开:
尽管如此:
size=z1serial.inWaiting()
如果尺寸:
数据=Z1串行读取(大小)
res=数据解码(“utf-8”)
打印(res)
其他:
打印(“数据未读取”)
时间。睡眠(1)
其他:
z1serial.close()
打印('未打开或已在使用')
除serial.SerialException外:
打印(“COM4未打开”)
时间。睡眠(1)

这对我来说很有效,在Python 3.7上运行时,如果我在try块中包含z1串行分配,port not open意味着脚本已经停止。但是,我想继续监视端口直到打开。该怎么办。我对代码做了一点修改。我包括了一个无限循环,所以你一直在港口,直到它是开放的观察。我还包括了一个
time.sleep(1)
如果端口未打开,在检查端口之间会有一些延迟,但您可以更改延迟。这能回答你的问题吗?