代码之家  ›  专栏  ›  技术社区  ›  Pithikos

Pyserial:奇怪的权限被拒绝

  •  1
  • Pithikos  · 技术社区  · 10 年前

    我使用 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设备会出现以下错误

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

    这对我来说没有意义,因为它在其他方面是有效的。我在 dialgroup 我以普通用户的身份运行python。

    知道发生什么事了吗?

    1 回复  |  直到 10 年前
        1
  •  0
  •   Pithikos    10 年前

    实际上,持续尝试打开端口一段时间后终于成功了。因此,隐藏错误使其暂时有效:

    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
    

    这当然只是一次黑客攻击。这种行为仍然很奇怪,我不确定是pyserial有问题还是其他程序干扰了该序列。

    我注意到,只要我插上USB设备,调制解调器管理器就会开始使用串行端口几秒钟:

    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 例外