1

私は64ビットのWindows 7マシンでPython 2.7.3を実行しており、同じPythonバージョン(2.7.3)を実行している64ビットのUbuntuマシンに(USB-> RS232ケーブル経由で)接続しています。

Windows 7 側で timeout=None が正しく機能していないようで、その理由がわかりません。

これが私が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

python2.7.3およびpyserial2.6を搭載したWindows7x64では、正常に動作します。

>>> 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を使用していますか?ChristophGohlke1によるPython拡張パッケージ用の非公式Windowsバイナリからコンパイルされたバイナリを入手しまし。多分あなたはこれを試してみるべきです。

于 2013-03-09T20:28:38.807 に答える