python telnetlib expect error:TypeError:不能在类字节对象上使用字符串模式

时间:2013-01-30 16:33:54

标签: python python-3.x telnetlib

我试图将2个预编译的正则表达式传递给python的telnetlib expect方法,但我得到:TypeError:不能在类字节对象上使用字符串模式。示例代码如下:

import re,sys,telnetlib

tn=telnetlib.Telnet('localhost',23,10)

re_list=[re.compile("login:",re.I),re.compile("username:",re.I)]
print("re_list:",re_list)
# Expect gets errors here
index,obj,data=tn.expect(re_list,10)

示例输出如下:

python tn_exp_bug.py
re_list: [<_sre.SRE_Pattern object at 0x00A49E90>, <_sre.SRE_Pattern object at 0x00A6CB60>]
Traceback (most recent call last):
File "tn_exp_bug.py", line 8, in <module>
index,obj,data=tn.expect(re_list,10)
File "c:\python33\lib\telnetlib.py", line 652, in expect
return self._expect_with_select(list, timeout)
File "c:\python33\lib\telnetlib.py", line 735, in _expect_with_select
m = list[i].search(self.cookedq)
TypeError: can't use a string pattern on a bytes-like object</pre>

其他细节: 我在Windows XP上运行,Python版本3.3.0。我检查了bugs.python.org并且telnet只有一个开放的bug,这看起来并没有什么相关的。

1 个答案:

答案 0 :(得分:3)

您尝试在字节对象上使用字符串模式,而您应该使用字节模式:

re.compile(b"login:",re.I),re.compile(b"username:",re.I)