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
异常。
我在我的程序中使用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
异常。