Python 有人在telnetlib.expect()方面运气好吗?
我正在编写一个库来支持远程服务器的远程登录和应用程序的运行 在建立连接、获取数据、解析等方面进展顺利(至少与通过文本接口与程序通信一样顺利) 如果一个应用程序输入正确,它将更改光标;如果失败,它将保留原来的光标(我不编写应用程序,我只需要使用它们) 当所述应用程序正确启动时,不会出现任何问题:Python 有人在telnetlib.expect()方面运气好吗?,python,telnetlib,Python,Telnetlib,我正在编写一个库来支持远程服务器的远程登录和应用程序的运行 在建立连接、获取数据、解析等方面进展顺利(至少与通过文本接口与程序通信一样顺利) 如果一个应用程序输入正确,它将更改光标;如果失败,它将保留原来的光标(我不编写应用程序,我只需要使用它们) 当所述应用程序正确启动时,不会出现任何问题: promptB = "hello(x)# " # Yes, the space at the end is intentional response = tn_conn.cmd("app_name\n
promptB = "hello(x)# " # Yes, the space at the end is intentional
response = tn_conn.cmd("app_name\n", prompt=promptB)
我想使用提示更改(或缺少提示更改)来检测程序是否启动失败。我认为这是一个尝试telnetlib的expect()的绝佳机会,因为expect()允许在响应中传递要匹配的字符串列表
但是,我无法让这项工作发挥作用:
promptA = "hello(x)# " # Yes, the space at the end is intentional
promptB = "hello> " # Yes, the space at the end is intentional
tn_conn.write("app_name\n")
which_prompt, mo, response = self.tn_conn.expect([promptA, promptB], timeout=3)
expect命令始终超时,无论应用程序是否成功启动
which=“-1”
mo=无
response=“mumble mumble\r\r\n其他东西\r\n\r\nhello”
文档中说,字符串或正则表达式对象都可以按预期传递(我传递的是字符串),那么我是否遗漏了什么?查看telnetlib代码可以发现,它调用的是re.search(),而不是re.match(),所以这似乎不是问题所在
有人能就我做错了什么提出建议吗
编辑
在提示示例中添加了paren,以更好地说明expect()无法按预期工作的原因。在以前的尝试中,我使用了regex选项,将
*
放在搜索字符串的两端,并对搜索字符串执行重新编译()
,然后将其传递给.expect()
;都没有运气
多亏了jathanism的建议,我重新检查了使用正则表达式,这次我认为expect()
是,呃。。。在我想“string”的地方期待“regex”
果不其然,我的提示字符串中有一些字符被当作正则表达式符号处理--
()
。逃离paren让expect()完成它的工作。我有工作要做。查找#或%或$提示。至于提示,请确保转义特殊字符。( ). 也许逃避一切只是为了确定
idx, obj, response = tn_conn.expect("\#","\%","\$",3)
不要忘记,如果您在python中使用正则表达式,您可以始终使用raw(
r'my string'
)方法,而不是添加所有转义;使其更具可读性。如果使用字符串,则必须精确匹配。使用正则表达式可能会更幸运。试试看!