我正在使用pySerial向Eddie发送命令。我需要在我的readline中指定一个回车,但是pySerial 2.6去掉了它。。。有解决办法吗?
以下是本PDF第二和第三页中列出的Eddie command set。这里是一个backup image,以防无法访问PDF。
Input: <cmd>[<WS><param1>...<WS><paramN>]<CR>
Response (Success): [<param1>...<WS><paramN>]<CR>
Response (Failure): ERROR[<SP>-<SP><verbose_reason>]<CR>
如您所见,所有响应都以\r
结尾。我要叫皮瑟瑞停下来。
def sendAndReceive(self, content):
logger.info('Sending {0}'.format(content))
self.ser.write(content + '\r')
self.ser.flush();
response = self.ser.readline() # Currently stops reading on timeout...
if self.isErr(response):
logger.error(response)
return None
else:
return response
从端口3读取10个数据,板速率为38400,当输入数据时,数据用字符分隔
从pyserial的documentation:
(原文如此)
注:
当pySerial使用较新的Python版本(V2.6+)运行时,不再支持
io
模块的eol
参数。 下线要为
readline()
指定EOL
字符或使用通用换行模式,建议使用io.TextIOWrapper
:我遇到了同样的问题,实现了自己的readline()函数,我从pyserial包中的serialutil.py文件复制并修改了该函数。
串行连接是该函数所属类的一部分,并保存在“self.ser”属性中
这是一个比等待超时更安全、更好和更快的选择。
编辑: 我在尝试让io.TextIOWrapper方法工作时遇到了thispost(谢谢zmo)。 因此,您可以使用以下命令而不是上面提到的自定义readline函数:
请确保将参数
1
传递给BufferedRWPair
,否则它不会在每个字节后将数据传递给TextIOWrapper,从而导致串行连接再次超时。当将
line_buffering
设置为True
时,您不再需要在每次写入之后调用flush
函数(如果写入以换行字符结束)。编辑: TextIOWrapper方法在小的命令字符串中实际工作,但是它的行为是未定义的,当传输超过几个字节时可能导致errors。真正安全的做法是实现自己的
readline
版本。相关问题 更多 >
编程相关推荐