我在64位Windows 7计算机上运行Python 2.7.3,并且它(通过USB-> RS232电缆)连接到运行相同Python版本(2.7.3)的64位Ubuntu计算机。
我遇到了一个问题,其中超时=无在Windows 7方面似乎无法正常工作,我无法弄清楚原因。
这就是我在胜利方面所拥有的:
>>> 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
现在我已经阅读了文档here,我知道如果我没有超时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上进行此设置时是否有任何已知的警告?有谁有想法为什么我看到这个问题?关于其他事情的任何想法,我可以尝试帮助诊断这种失败?
答案 0 :(得分:0)
在Windows 7 x64上使用python 2.7.3和pyserial 2.6,它可以正常工作:
>>> 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从非官方的Windows二进制文件中为Python扩展包编译了二进制文件。 也许你应该试试这个。
答案 1 :(得分:0)
我在Raspberry Pi上遇到了同样的问题。值得注意的是USB-RS232电缆!这似乎与纯RS232接口有不同的行为。当您从端口读取n字节时,它将始终返回n“0”字节,尽管没有可用的数据。特别是它将填充一个读取请求,该请求不仅仅要求上述“0”字节的等待承诺。唯一的方法是使用in_waiting并只读取属性承诺的字节数。