然后问题变成了如何捕获大于20kb的输出。。。当记录到文件时,我得到所有输出,但我只想保存选择性输出,而不是整个会话。当使用child.after输出被截断时,例如缺少开头,可以通过增加maxread稍微减轻一点,但是当接近30-40kb的输出时,它仍然会爆炸。
对于那些好奇的人,我正在使用“sh int | I protocol | Last”获取Cisco交换机的输出这只返回每个接口3行,但是我的一些客户的交换机堆栈有450个端口。
不知道这里的动态是什么,但对于一些开关来说,它确实成功了。
有一段时间,我试图通过有选择地打开和关闭对文件的日志记录来解决这个问题。这被证明是不可靠的,从一般的日志记录中,我可以看到pexpect在日志记录看到它之前匹配了输出方式。当数据仍在写入文件时,我最终禁用了日志记录。在大约10行输出之后截断输出。
因此,最终的问题仍然是,如何提高儿童的可靠性。为了捕获大的输出。只要输出是可靠的,增加expect语句的超时就没有问题。我现在看到的是没有输出不完整的超时。child.sendline(action)
child.expect(prompt_keys)
action_output = str(child.after) # Captures the output
# print action_output # Uncomment for debugging grabbed output
output_file.write(action_output + "\n\n\n") # Write the output to file