我正在编写一个库来支持远程服务器和运行应用程序的 telnet。
在建立连接、取回数据、解析等方面进展顺利(至少就像通过文本界面与程序通信一样顺利)。
如果输入正确,一个应用程序将更改光标,如果输入失败,则保留原始光标(我不编写应用程序,我只需要使用它们。)
当所述应用程序正确启动时,这没有问题:
promptB = "hello(x)# " # Yes, the space at the end is intentional
response = tn_conn.cmd("app_name\n", prompt=promptB)
Run Code Online (Sandbox Code Playgroud)
我想使用提示更改(或缺少提示更改)来检测程序是否无法启动。我认为这将是尝试 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)
Run Code Online (Sandbox Code Playgroud)
无论应用程序是否成功启动,expect 命令总是超时。
which = "-1"
莫 = 无
response = "mumble mumble\r\r\n 其他东西\r\n\r\n你好#"
文档说可以将字符串或正则表达式对象传递给期望(我正在传递一个字符串),所以我错过了什么吗?查看 telnetlib 代码表明它调用的是 re.search(),而不是 re.match(),所以这似乎不是问题。
任何人都可以就我做错了什么提出建议吗?
编辑 在提示示例中添加括号以更好地说明为什么 expect() 没有按预期工作。
在之前的尝试中,我通过放置.*在搜索字符串的两端来追求正则表达式选项,并在将re.compile()搜索字符串传递给 ; 之前对搜索字符串执行a 操作.expect()。一切都没有运气。
感谢 jathanism 的建议,我重新检查了正则表达式的使用,这次的想法是expect(),呃...在我思考“字符串”的地方期待“正则表达式”。
果然,我的提示字符串中有一些字符期望被视为正则表达式符号 -()准确地说。逃避括号让其expect()完成它的工作。
| 归档时间: |
|
| 查看次数: |
10834 次 |
| 最近记录: |