Pyserial write() 挂起

Dan*_*iel 5 python pyserial python-3.6 ubuntu-16.04

我需要使用串行端口与某些设备进行通信。我知道这个设备参数(boudrate 等)。我也知道这个设备会一直等到它收到一个换行符(我不知道 unix 或 windows 类型),然后用 ASCII 发回一些东西。

问题是,当我想写任何东西时,脚本会挂起。没有错误发生,只是以后什么都没有发生。无法打印任何内容,甚至无法关闭端口。

我该如何解决?

它不适用于真正的基本脚本。当然,这不是一个完整的代码,只是一个示例来说明什么不起作用。

可悲的是,我没有找到任何有效的解释或答案。

我正在使用 Ubuntu 16.04

谢谢你的帮助!

import serial

ser = serial.Serial(
port="/dev/NameOfDevice",
baudrate=115200,
bytesize=8,
parity='N',
stopbits=1,
timeout = 0)

ser.open()
print('Port was opened')

ser.write(b'\r\n') #this is a line where it stops working. Different inputs were tried, nothing works.
print('Does it works?')
Run Code Online (Sandbox Code Playgroud)

Tri*_*rim 2

编辑:我以前是个傻瓜,但现在我确信我是对的。

我遇到了同样的问题并通过添加“write_timeout”解决了它:

ser = serial.Serial(
port="/dev/NameOfDevice",
baudrate=115200,
bytesize=8,
parity='N',
stopbits=1,
write_timeout = 1,
timeout = 0)
Run Code Online (Sandbox Code Playgroud)

请注意,这将引发超时异常。就我而言,这是预期的行为,因为我正在检查是否可以正确连接用户指定的端口。

所以我怀疑您正在连接到某些东西,但它没有确认您的写入,并且由于“写入”的默认行为是阻塞直到确认,这就是您所看到的。

另请参阅 write 函数的 api 描述: https://pyserial.readthedocs.io/en/latest/pyserial_api.html