PySerial API在write()期间为何认为串口仍然打开?
我正在使用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)
,这样程序会在等待回应时不会无限期地卡住。
如果这样做之后程序还是卡住,那问题可能出在蓝牙的处理上。