PySerial API在write()期间为何认为串口仍然打开?

0 投票
2 回答
1402 浏览
提问于 2025-04-16 18:44

我正在使用PySerial(一个用于串口通信的Python接口)通过蓝牙向诺基亚手机发送AT命令。

import serial
com = serial.Serial()
com.port = 19
com.timeout = 0 #also tried a timeout value greater than 0.
try:
    com.open()
    # at this point I turn off the phone.
    com.write("AT\r\n")
    print com.readlines()
except SerialException, e:
    print e

在我打开串口之后,我把手机关掉。然后,我发送了一个命令("AT\r\n")。在这个时候,程序就卡住了,运行也停止了。

你们有什么解决办法吗?

2 个回答

-1

其实,你真正需要的是写入超时(writeTimeout),而不是超时(timeout)这个参数。我知道我回答得有点晚,但我还是需要这个信息,我想我不是唯一一个需要的人。

0

当你把超时设置为 0 时,其实就是关闭了超时这个选项,这样 read()/readlines() 就会变成一个阻塞调用。这意味着调用这个函数的程序会一直等着,直到设备有回应为止。

你可以试着把串口连接的超时设置为一个非零的值,比如 com = serial.Serial(timeout=0.5),这样程序会在等待回应时不会无限期地卡住。

如果这样做之后程序还是卡住,那问题可能出在蓝牙的处理上。

撰写回答