2013-01-09 7 views
0

64 비트 Windows 7 컴퓨터에서 Python 2.7.3을 실행 중이며 동일한 작업을 실행하는 64 비트 Ubuntu 컴퓨터에 (USB-> RS232 케이블을 통해) 연결되어 있습니다. Python 버전 (2.7.3).Windows에서 pyserial의 시간 초과 값이 작동하지 않습니다.

timeout = None이 Windows 7 측에서 올바르게 작동하지 않는 것 같은데 문제가 발생하여 그 이유를 알 수 없습니다. 여기

내가 승리 측이 무엇 : 지금은 문서 here 읽은

>>> 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은 기본이며 뭔가를 변경 한 경우 궁금 해서요 ... 기다리고 아니에요,하지만 난 리눅스 측에 코드를하려고 할 때, 작동 :

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

파이썬 2.7.3와 pyserial 2.6 7 64 그것을 잘 작동합니다 :

>>> 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의 비공식 Windows 바이너리 (Python Extension Packages) 1에서 컴파일 된 바이너리를 얻었습니다. 아마도 이것을 시도해야합니다.

0

라즈베리 파이에서 같은 문제가 발생합니다. 주목할만한 것은 USB-RS232 케이블입니다! 이것은 순수한 RS232 인터페이스와 다른 행동을하는 것 같습니다. 데이터가 없더라도 포트 이벤트에서 n 바이트를 읽으면 항상 n "0"바이트를 반환합니다. 특히 앞서 언급 한 "0"바이트로 in_waiting 약속을 요구하는 읽기 요청을 채울 것입니다. 이 문제를 해결할 수있는 유일한 방법은 in_waiting을 사용하고 속성에서 약속하는 바이트 수만 읽는 것입니다.

관련 문제