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'
)方法,而不是添加所有转义;使其更具可读性。

如果使用字符串,则必须精确匹配。使用正则表达式可能会更幸运。试试看!