Pyserial:如何在打开串口之前知道它是否空闲

时间:2014-06-30 15:13:16

标签: python pyserial

我使用python和Pyserial来使用串口,​​代码如下:

import serial
portName = 'COM5'

ser = serial.Serial(port=portName)

# Use the serial port...

但是,问题是,如果端口已经打开(例如,由另一个应用程序打开),当我尝试打开它时会收到错误:"SerialException: could not open port 'COM5': WindowsError(5, 'Access is denied.')"

我想知道是否可以在尝试打开端口之前打开端口以避免此错误。我想使用一种条件,只有在我可以的时候打开它:

import serial
portName = 'COM5'

if portIsUsable(portName):
    ser = serial.Serial(port=portName)

# Use the serial port...

修改

我找到了办法:

import serial
from serial import SerialException

portName = 'COM5'

try:
    ser = serial.Serial(port=portName)
except SerialException:
    print 'port already open'

# Use the serial port...

1 个答案:

答案 0 :(得分:1)

def portIsUsable(portName):
    try:
       ser = serial.Serial(port=portName)
       return True
    except:
       return False

如评论中所述,在你开启和关闭的情况下注意竞争条件......

也可能最好只返回串行对象或无

def getSerialOrNone(port):
    try:
       return serial.Serial(port)
    except:
       return None

[编辑]我故意将除外作为一个全能,因为我认为实际的失败并不重要。因为无论错误如何,该端口都不可用...因为该函数正在测试端口的可用性,所以为什么你得到一个异常并不重要,只有你有一个例外。