最近、telnet 経由でサーバーに接続するための小さなスクリプトを書きました (何らかの理由で、すべての特定のプログラムが接続を拒否しました)。プログラムは次のとおりでした。
import telnetlib
tn = telnetlib.Telnet('www.google.com',80)
tn.write('GET / HTTP/1.0\n')
tn.write('Host: www.google.com\n')
tn.write('User-agent: Chrome\n\n')
out = tn.read_all()
print(out)
Python 2.x では問題なく動作しました。しかし、その後 Python 3.x で使い始めたところ、Python 3.x 以降のすべての文字列が Unicode オブジェクトであるという問題に遭遇しました。そこで、どうすれば修正できるかを考え始め、デコレータを使用して解決策を見つけました。
実際にはb
、すべての文字列の前に置くこともできました (文字列はごくわずかでした)。しかし、私はそれが巨大なコード スニペットであるかのようにやりたかったのです (トレーニングと優れたコード プラクティスを使用するためだけに)。
デコレータを使用したソリューションは次のとおりです。
def to_binary(f):
def wrapper(self, *args):
s,*args = args
s = s.encode() #this line performs conversion to binary string
return f(self, s, *args)
return wrapper
telnetlib.Telnet.write = to_binary(telnetlib.Telnet.write)
私の質問は:
これは、将来私がプロジェクトで使用するのに適したソリューションですか? または、すべての文字列の先頭に を追加tn.write
するb
か、他のものを使用することをお勧めします。