我需要从设备中获取(解析)它的整个输出。
我的解决方案是:1)确定输出的最后一行是怎样的
2)使用下面的代码读取输出直到最后一行(这是一种说法 - 读取整个输出)
last_line = "text of the last line"
read_until(last_line)
3)技术细节:将return
的{{1}}值作为将其进一步传递给get_output()
函数的方法。
问题是:最后一行可能采用各种形式,只有粗略的格式才知道。例如,它可能会说:parse_result()
。但是,{"diag":"hdd_id", "status":"0"}
和"diag"
可能采用除"status"
和"hdd_id"
之外的其他值。
如何制作最后一行"的文字"更通用,以便read_until()为" diag"的每个值停止和"状态"? (鉴于输出总是包含单词" diag"和" status")
我尝试过:使用正则表达式。使用正则表达式中"0"
表示任何值的事实定义last_line = re('"status":"."}')
。我得到的是.
。
通过TypeError: 'module' object is not callable
将正则表达式转换为字符串也没有多大意义,因为据我理解正则表达式,它不代表任何特定的字符串(由于str(re('"status":"."}'))
)。
答案 0 :(得分:0)
您应该(再次)阅读Python标准库手册中的re
章节。
正确用法是:
import re
...
eof = re.compile(r'\s*\{\s*"diag":.*,\s*"status":.*\}') # compile the regex
...
上面的表达式使用\s*
来允许行中的可选空格。如果您知道它们不会发生,您可以删除它们。
然后,您可以将其与telnetlib
Python模块一起使用,但使用expect
代替read_until
,因为后者搜索字符串而不是正则表达式:
index, match, text = tn.expect([eof])
这里,index将匹配正则表达式的索引(此处为0),匹配匹配对象,并发送包含最后一行的全文