pySerial: port only works the first I use it after I power it on
我无法使用 pySerial 读取任意端口。我只能在端口打开后没有被任何程序使用时读取端口。否则,我可以打开端口,但 ser.inWaiting() 返回 0,告诉我端口缓冲区中没有数据。实际上,我可以在端口监视器中看到数据,那么为什么 pySerial 没有数据呢?我正在使用 os x 10.9.5.、python 2.7.8 和 pySerial 2.7
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 | def usb(): ser = serial.Serial('/dev/tty.usbmodem422651', 115200) try: while True: print ser.read(1000) except KeyboardInterrupt: ser.close() exit if __name__ =="__main__": testUSB() |
感谢您的帮助!
你需要了解串行是如何工作的。
如果你已经打开了某个终端并读取了数据,那么它的串口输入缓冲区现在是空的。
1 2 | while True: print ser.read(1000) |
这不是一个好习惯,您可以使用 inWating 尝试以下操作:
1 2 | if ser.inWaiting: ser.read(len(ser.inWaiting())) |
您无法从 2 个不同的应用程序或软件打开端口。
一个好的代码应该是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import serial def my_usb(): s_handle = serial.Serial('/dev/tty.usbmodem422651', 115200) # or any other end condition while True: try: if s_handle.inWaiting(): print s_handle.read(s_handle.inWaiting()) except KeyboardInterrupt: print"exiting...." finally: s_handle.close() if __name__ =="__main__": my_usb() |