telnetlib 使用正则表达式的 Read_Until

1 投票
1 回答
2438 浏览
提问于 2025-04-18 03:49

我想在TelnetLib库中处理多个提示信息。

tn.read_until(b"login: ")

这是我现在使用的代码,但你可以看到它只等待“login:”这个提示。

在Perl中,我的解决方案是:

$t->waitfor('/[:>%\$#]/');

有没有办法把这个代码转换过来?

1 个回答

2

来自 https://docs.python.org/2/library/telnetlib.html#telnetlib.Telnet.expect:

Telnet.expect(list[, timeout])

这个函数会一直读取数据,直到找到一个符合你给定的正则表达式列表中的某个表达式为止。

第一个参数是一个正则表达式的列表,可以是已经编译好的(正则对象)或者是普通字符串。第二个参数是可选的超时时间,单位是秒;默认情况下,它会一直等待,直到找到匹配的内容。

这个函数会返回一个包含三个部分的元组:第一个部分是匹配的正则表达式在列表中的索引;第二个部分是匹配到的对象;第三个部分是读取到的文本,直到并包括匹配的部分。

如果在读取过程中遇到文件结束符,但没有读取到任何文本,就会抛出EOFError错误。否则,如果没有任何匹配的内容,它会返回(-1, None, text),其中text是到目前为止接收到的文本(如果超时了,可能是空字符串)。

如果某个正则表达式以贪婪匹配结尾(比如 .*)或者有多个表达式可以匹配同样的输入,结果就会变得不确定,可能会受到输入输出的时间影响。

撰写回答