我發現了什麼問題是,並回答了我自己的問題。
這條線之下原來的問題
我有COM4
和COM5
之間的串行橋軟件(具體來說,HDD的免費虛擬串行配置實用程序)
實現我有兩個不同的Python腳本啓動Powershell的兩個不同實例,先收到:
import serial
receive = serial.Serial(port = 'COM5', baudrate = 9600)
text = receive.read(100)
receive.close()
print text
然後寄件人:
import serial
send = serial.Serial(port = 'COM4', baudrate = 9600, timeout = 0)
send.write("Hello")
send.close()
當開始發送腳本時,接收器腳本獲取發送消息(讓溝通明確規定),但發件人腳本立即以錯誤結束:
Traceback (most recent call last):
File ".\sending.py", line 3, in <module>
send.writelines("Hello")
File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 270, in write
raise writeTimeoutError
serial.serialutil.SerialTimeoutException: Write timeout
我得到同樣的錯誤時,我將發件人腳本更改爲
send = serial.Serial(port = 'COM4', baudrate = 9600)
所以我的問題是:什麼時候超時?我如何防止這種情況發生?我的意思是,數據正在發送,所以我可能只是把整個東西放在try/except(and do nothing)
塊中,但從長遠來看這似乎是一個不好的解決方案。
軟件橋可能存在bug,我在硬件端口COM或USB-COM上沒有看到這個異常。 在異常情況下傳遞(不做任何事)是不好的,因爲你有超時並且它降低了傳輸速度。 – eri
其實,在我發佈這個和現在之間,我想我已經發現了這個問題 - pyserial似乎只適用於32位體系結構(至少在Windows平臺上) - 文件serialwin32.py是一個提示,有人可以證實嗎? – medivh
我剛剛遇到了FTDI USB/RS-232橋接器的這個問題。驅動程序似乎阻止進程被殺死(腳本停止異常,python不能被殺死,CMD沒有關閉),只有拉動設備(謹防藍屏)才能使事情重演。 – handle