Pyserial:奇怪的权限被拒绝

Pyserial: weird permission denied

我在我的程序中使用pyserial打开串口。如果我在启动程序之前插入了 USB 设备,这就可以正常工作。但是,如果我使用执行插入 USB 设备,我会收到 permission denied 错误。

我的代码

import serial, sys

def get_serial_port():
    ser_devs = [dev for dev in os.listdir('/dev') if dev.startswith('ttyAC')]
    if len(ser_devs) > 0:
        return '/dev/'+ser_devs[0]
    return None

while(1):
    port = get_serial_port()
    if port:
        print('Will open port %s' % port)
        ser = serial.Serial(port)

错误:

程序运行时插入 USB 设备 运行ning 出现以下错误

serial.serialutil.SerialException: could not open port /dev/ttyACM0:
                       [Errno 13] Permission denied: '/dev/ttyACM0'

这对我来说没有意义,因为它可以正常工作。我在 dialgroup 并且我 运行 python 作为普通用户。

知道发生了什么事吗?

不断尝试打开端口,终于成功了。因此,隐藏错误使其暂时有效:

while(1):
    port = get_serial_port()
    if port:
        print('Will open port %s' % port)
        try:
            ser = serial.Serial(port, 9600)
            print(ser.readline())
        except:
            pass

这当然只是一个 hack。这种行为仍然很奇怪,我不确定是 pyserial 有问题还是其他程序干扰了 serial。

我注意到,只要我插入 USB 设备,modem-manager 就会开始使用串行端口几秒钟:

ModemMana  851        root 8u  CHR  166,0  0t0  16925693 /dev/ttyACM0
gmain      851   879  root 8u  CHR  166,0  0t0  16925693 /dev/ttyACM0
gdbus      851   884  root 8u  CHR  166,0  0t0  16925693 /dev/ttyACM0

我仍然不明白这个 'bug' 怎么会给出 Permission denied 错误。我希望在这种情况下出现 Device busy 异常。