Python pySerial:端口仅在我通电后第一次使用时起作用

Python pySerial:端口仅在我通电后第一次使用时起作用,python,serial-port,pyserial,Python,Serial Port,Pyserial,我无法用pySerial读取任意端口。我只能在端口开启后未被任何程序使用时读取端口。否则,我可以打开端口,但ser.inWaiting返回0,告诉我端口缓冲区中没有数据。实际上,我可以在端口监视器中看到数据,那么为什么pySerial没有数据呢?我使用的是os x 10.9.5、python 2.7.8和pySerial 2.7 代码如下: def usb(): ser = serial.Serial('/dev/tty.usbmodem422651', 115200) try:

我无法用pySerial读取任意端口。我只能在端口开启后未被任何程序使用时读取端口。否则,我可以打开端口,但ser.inWaiting返回0,告诉我端口缓冲区中没有数据。实际上,我可以在端口监视器中看到数据,那么为什么pySerial没有数据呢?我使用的是os x 10.9.5、python 2.7.8和pySerial 2.7

代码如下:

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()

谢谢你的帮助

您需要了解串行通信是如何工作的

如果您已经打开某个终端并读取数据,则串行端口的输入缓冲区现在是空的

这不是一个好的做法,您可以使用以下方法尝试:

无法从2个不同的应用程序或软件打开端口

好的代码如下所示:


谢谢你的建议。我发现,当我第一次使用端口时没有从缓冲区读取所有字节时,我不能再次使用端口。你说得对,我在等你!NP,请记住串行端口没有内存,这就像一个队列,如果您将数据弹出到软件或标准屏幕,端口队列将为空,如果答案解决了问题,您可以将其作为答案接受。
while True:
   print ser.read(1000)
if ser.inWaiting:
   ser.read(len(ser.inWaiting()))
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()