gpt4 book ai didi

python - PySerial write() 即时超时

转载 作者:行者123 更新时间:2023-11-28 17:45:53 24 4
gpt4 key购买 nike

编辑

我发现了问题所在并回答了我自己的问题。

此行下方的原始问题

我在 COM4COM5 之间有一个串口桥接器,用软件实现(特别是 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) block 中,但从长远来看,这似乎是一个糟糕的解决方案。

最佳答案

线索就在报错信息中[1]

File "C:\Python27\lib\site-packages\serial\serialwin32.py", line 270, in write
raise writeTimeoutError

所以我们打开那个文件并找到:

if self._writeTimeout != 0: # if blocking (None) or w/ write timeout (>0)
# Wait for the write to complete.
#~ win32.WaitForSingleObject(self._overlappedWrite.hEvent, win32.INFINITE)
err = win32.GetOverlappedResult(self.hComPort, self._overlappedWrite, ctypes.byref(n), True)
if n.value != len(data):
raise writeTimeoutError

再次阅读第一个条件:

if self._writeTimeout != 0:

所以让我们重写之前的代码

send = serial.Serial(port = 'COM4', baudrate = 9600, timeout = 0)

成为

send = serial.Serial(port = 'COM4', baudrate = 9600, writeTimeout = 0)

Et Voila:也不异常(exception)。

[1] 精心设计的错误信息?这是新的!

关于python - PySerial write() 即时超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18313022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com