1

我在 64 位 Windows 7 机器上运行 Python 2.7.3,并且它(通过 USB->RS232 电缆)连接到运行相同 Python 版本(2.7.3)的 64 位 Ubuntu 机器。

我遇到了一个问题,timeout=None 在 Windows 7 端似乎无法正常工作,我不知道为什么。

这是我在 Win 方面所拥有的:

>>> import serial
>>> s = serial.Serial(3)
>>> s.baudrate = 9600
>>> s
Serial<id=0x203a320, open=True>(port='COM4', baudrate=9600, bytesize=8, parity='N',
stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
>>> s.read(5)
''                  <--- returns right away
>>> s.timeout = 0
>>> s.read(5)
''                  <--- correctly returns right away
>>> s.timeout = 10
>>> s.read(5)       <--- correctly waits 10s

现在我在这里阅读了文档,我知道如果我不给它超时None它应该永远等待,并且0超时它应该立即返回,但None它是默认值并且它没有等待......我想知道是否发生了变化,但是当我在 Linux 端尝试代码时,它可以工作:

>>> import serial
>>> s = serial.Serial("/dev/ttyUSB0")
>>> s.baudrate = 9600
>>> s
Serial<id=0x7f325e002b50, open=True>(port='/dev/ttyUSB0', baudrate=9600, bytesize=8, 
parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
>>> s.read(5)
''                  <--- correctly waits forever
>>> s.timeout = 0
>>> s.read(5)
''                  <--- correctly returns right away
>>> s.timeout = 10
>>> s.read(5)       <--- correctly waits 10s

在 Windows 上进行设置时是否有任何已知的警告?有谁知道为什么我会看到这个问题?关于我可以尝试帮助诊断此故障的其他事情的任何想法?

4

2 回答 2

0

在带有 python 2.7.3 和 pyserial 2.6 的 windows 7 x64 上它工作正常:

>>> import serial
>>> s = serial.Serial(1)
>>> Serial<id=0x3ea5518, open=True>(port='COM2', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
>>> s.read(5)
# ... after receiving real data ... 
'\xb99\xad\x87\xc2'

你使用什么版本的 PySerial?我已经从 Christoph Gohlke 1的 Unofficial Windows Binaries for Python Extension Packages 中编译了二进制文件。也许你应该试试这个。

于 2013-03-09T20:28:38.807 回答
0

我在 Raspberry Pi 上遇到了同样的问题。值得注意的是 USB-RS232 电缆!这似乎与纯 RS232 接口有不同的行为。当您从端口读取 n 字节时,即使没有可用数据,它也将始终返回 n“0”字节。特别是它会用前面提到的“0”字节填充一个请求超过 in_waiting 承诺的读取请求。解决这个问题的唯一方法是使用 in_waiting 并仅读取属性承诺的字节数。

于 2017-11-08T13:23:38.177 回答