我正在使用pySerial向Eddie发送命令。我需要在我的readline中指定一个回车符,但是pySerial 2.6摆脱了它…是否有解决方法?
以下是此PDF第二和第三页上列出的Eddie命令集。这是无法访问PDF的备用图片。
Input: <cmd>[<WS><param1>...<WS><paramN>]<CR>
Response (Success): [<param1>...<WS><paramN>]<CR>
Response (Failure): ERROR[<SP>-<SP><verbose_reason>]<CR>
如您所见,所有响应都以结尾\r
。我需要告诉pySerial停止。
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
我遇到了同样的问题,并实现了我自己的readline()函数,该函数是我从pyserial包中的serialutil.py文件复制和修改的。
串行连接是此函数所属的类的一部分,并保存在属性’self.ser’中
def _readline(self):
eol = b'\r'
leneol = len(eol)
line = bytearray()
while True:
c = self.ser.read(1)
if c:
line += c
if line[-leneol:] == eol:
break
else:
break
return bytes(line)
与等待超时相比,这是一个更安全,更好和更快的选择。
编辑:尝试使io.TextIOWrapper方法工作时,我遇到了这篇文章。因此,可以使用以下代码来代替使用上面提到的自定义readline函数:
self.ser = serial.Serial(port=self.port,
baudrate=9600,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
timeout=1)
self.ser_io = io.TextIOWrapper(io.BufferedRWPair(self.ser, self.ser, 1),
newline = '\r',
line_buffering = True)
self.ser_io.write("ID\r")
self_id = self.ser_io.readline()
确保将参数传递1
给BufferedRWPair
,否则在每个字节导致串行连接再次超时后,它将不会将数据传递给TextIOWrapper。
设置为时line_buffering
,True
不再需要flush
在每次写操作后调用函数(如果写操作以换行符终止)。
编辑:TextIOWrapper方法实际上适用于 小的
命令字符串,但其行为是不确定的,并且在传输多个字节时可能导致错误。实际上,最安全的做法是实现您自己的readline
。
稳定性: 2 - 稳定的 require('readline') 模块提供了一个接口,用于从可读流(如 process.stdin)读取数据,每次读取一行。 它可以通过以下方式使用: const readline = require('readline'); 例子,readline 模块的基本用法: const readline = require('readline'); const rl
配置 # readline_parse_and_bind.py try: import gnureadline as readline except ImportError: import readline readline.parse_and_bind('tab: complete') readline.parse_and_bind('set editing-mode vi')
问题内容: 我正在尝试在Java程序中阅读标准输入。我期望一系列数字后跟换行符,例如: 当通过eclipse内置控制台提供输入时,一切都会顺利进行。但是,使用Windows命令行时,程序将输出: 我的代码是: 有什么线索吗? 问题答案: 得到a 表示相关对象已到达EOF(文件末尾),或者换句话说,它们无法再获得任何标准输入。现在,您的代码明显的问题是: 的每个方法调用都会创建一个 新的 。 每个这
描述 (Description) 此函数从EXPR引用的文件句柄中读取一行,返回结果。 如果要直接使用FILEHANDLE,则必须将其作为typeglob传递。 简单的readline函数等效于<>。 语法 (Syntax) 以下是此函数的简单语法 - readline EXPR 返回值 (Return Value) 此函数在标量上下文中仅返回一行,在列表上下文中,返回到文件结尾的行的列表 例子
GNU Readline 库提供了一组供应用程序使用的功能,这些功能允许用户在键入命令时编辑命令行。Emacs 和 vi 编辑模式均可用。Readline 库包含其他功能,这些功能可以维护以前输入的命令行的列表,以重新调用并可能重新编辑这些命令行,并对先前的命令执行类似 csh 的历史记录扩展。 历史记录设施也作为构建过程的一部分放置在一个单独的库中,即历史记录库。在需要 Readline 功能的
我在 Ecrion 和 Apache FOP 的试用版中渲染了相同的 XSL-FO,您会注意到这两个渲染器在第 2 行和第 3 行上产生了不同的行长。Ecrion 渲染文本的方式就是我希望 Apache FOP 这样做的方式。 我是否可以将属性添加到