我知道还有其他问题与我的问题非常相似,但它们都没有解决我遇到的问题.
我想使用pyserial来访问串口(/ dev / tty …),但仅限于另一个进程尚未打开它的情况.
以下代码段在我的Ubuntu 12.04计算机上返回四个可用端口,运行一次.如果我第二次运行它,我预计没有可用的端口.遗憾的是,返回了相同的端口列表.似乎pyserial无法识别另一个进程已经打开了端口.
我希望抛出一个SerialException,或者isOpen()方法返回False,但是pyserial很乐意多次打开.
import serial
from serial import tools
from serial.tools import list_ports
def available_ttys():
for tty in serial.tools.list_ports.comports():
try:
port = serial.Serial(port=tty[0])
if port.isOpen():
yield port
except serial.SerialException as ex:
print 'Port {0} is unavailable: {1}'.format(tty,ex)
def main():
ttys = []
for tty in available_ttys():
ttys.append(tty)
print tty
input('waiting ...')
if __name__ == '__main__':
main()
无论我并行运行多少次,这都是输出:
Port ('/dev/ttyS31','ttyS31','n/a') is unavailable: Could not configure port: (5,'Input/output error')
...
Port ('/dev/ttyS0','ttyS0','Input/output error')
Serial