Python:试图打开串行端口导致IOError:[Errno 6]设备未配置

Python:试图打开串行端口导致IOError:[Errno 6]设备未配置,python,serial-port,arduino,Python,Serial Port,Arduino,我试图用以下代码在Python中打开两个串行端口: for i in range(0, 2): if platform.system() == "Darwin": pos = 2+i else: pos = i port = serial.Serial(current_ports[pos], BAUD_RATE, timeout=TIMEOUT) time.sleep(1.516) port.write('#') t

我试图用以下代码在Python中打开两个串行端口:

for i in range(0, 2):
    if platform.system() == "Darwin":
        pos = 2+i
    else:
        pos = i
    port = serial.Serial(current_ports[pos], BAUD_RATE, timeout=TIMEOUT)
    time.sleep(1.516)
    port.write('#')
    time.sleep(1.516)
    out = ''
    print "Reading MAC Address...."
    while port.inWaiting() > 0:
        out += port.read(1)
        print out
    if out == '04:E9:E5:00:EC:51':
        led_port = port
    elif out == '04:E9:E5:01:0C:E0':
        matrix_port = port   
有时端口成功打开,有时不成功。如果没有,我会收到以下错误消息:

Reading MAC Address....
Traceback (most recent call last):
  File "animation.py", line 227, in <module>
    main()
  File "animation.py", line 208, in main
    led_port, matrix_port = get_ports()
  File
"/Users/collinschupman/Documents/FutureCities/MurmurWall/Onsite/Raspi/helper_functions.py", line 41, in get_ports
while port.inWaiting() > 0:
 File "/Library/Python/2.7/site-packages/serial/serialposix.py", line 449, in inWaiting
    s = fcntl.ioctl(self.fd, TIOCINQ, TIOCM_zero_str)
IOError: [Errno 6] Device not configured
正在读取MAC地址。。。。
回溯(最近一次呼叫最后一次):
文件“animation.py”,第227行,在
main()
文件“animation.py”,第208行,主视图
led_端口,矩阵_端口=获取_端口()
文件
get_ports中的第41行“/Users/collinschupman/Documents/FutureCity/MurrullWall/site/Raspi/helper_functions.py”
当port.inWaiting()大于0时:
文件“/Library/Python/2.7/site packages/serial/serialposix.py”,第449行,在等待中
s=fcntl.ioctl(self.fd、TIOCINQ、TIOCM\u zero\u str)
IOError:[Errno 6]未配置设备
正如您所看到的,它到达inWaiting()调用,然后抛出此错误

作为一个小参考,代码正在向两个Arduinos发送一条消息,以便通过它们的MAC地址识别它们

是否有任何明显不正确的地方,我正在做的Python端,这将导致这个设置失败一次又一次?我想说现在这个代码有50%的时间是有效的

谢谢


Collin

Arduinos上的串行端口上是否运行getty进程?甚至在连接到Arduinos的本地机器的串行端口上?如果是这样的话,可能是干扰,应该停止。这里有一个可能相关的参考资料:

我有类似的问题,我用以下解决方案解决了它

$sudo nano/etc/inittab

然后转到文件的底部,您将看到

T0:23:重生:/sbin/getty-L ttyam0 115200 vt100

或类似

只需在开头添加一个#字符,现在看起来像:

#T0:23:重生:/sbin/getty-L ttyam0 115200 vt100

保存文件并重新启动 希望这能奏效

参考:

当前端口中有什么?当前端口是所有可用串行端口的列表。例如
/dev/ttyxxx
/dev/serial/by id/xxxx
?确切地说,“/dev/tty.*”是否签出?