4

コンパイル済みの 2 つの正規表現を python の telnetlib の expect メソッドに渡そうとしていますが、「TypeError: can't use a string pattern on a bytes-like object. サンプルコードは次のとおりです。

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 に関する未解決のバグが 1 つだけあり、まったく関係がないようです。

4

1 に答える 1

4

バイトパターンを使用する必要がありますが、バイトオブジェクトで文字列パターンを使用しようとしました。

re.compile(b"login:",re.I),re.compile(b"username:",re.I)
于 2013-02-01T17:24:07.163 に答える