Pyserial:奇怪的许可否认

时间:2015-01-21 16:55:19

标签: python permission-denied pyserial tty

我使用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 个答案:

答案 0 :(得分:0)

一段时间后,不断尝试打开端口终于成功了。所以隐藏错误使它暂时起作用:

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

这个当然只是一个黑客。这种行为仍然非常奇怪,我不确定它是否是错误或其他一些程序正在干扰序列。

我注意到,只要我插上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例外。