print
2.x の関数ではなく 2.x のステートメントに固執したい場合は、代わりにprint()
自分のステートメントをモックできますsys.stdout
。
おそらく次のような方法で、ダミーの「ファイル」を作成します。
class Writable(object):
"""Class which has the capability to replace stdout."""
newwrite = None
def __init__(self, oldstdout, newwrite=None):
self.oldstdout = oldstdout
if newwrite is not None:
self.newwrite = newwrite
def write(self, data):
self.newwrite(self.oldstdout, data)
@classmethod
def subclass(cls, writefunc):
newcls = type('', (cls,),
dict(write=lambda self, data: writefunc(self.oldstdout, data)
return newcls
このクラスは、印刷データを取得する書き込み関数と組み合わせることを想定しています。この書き込み関数は 2 つの引数を取ることになっています。最初の引数は「古い stdout」を最後に印刷するために使用され、もう 1 つはデータ用です。
取りましょう
def mywrite(sink, data):
sink.write(data.encode("hex"))
そのために。
今、あなたはすることができます
import sys
sys.stdout = Writable(sys.stdout, mywrite)
またはあなたができる
@Writable.subclass
def mywritable(sink, data)
sink.write(data.encode("hex"))
sys.stdout = mywritable(sys.stdout)
2 番目のバージョンは少しトリッキーです:Writable
指定された関数を代わりに作成された新しいクラスのメソッドに変換し、指定された関数が由来する名前に入れるデコレータ関数の助けを借りて のサブクラスを作成します。
その後、「古い標準出力」を引数としてインスタンス化できる新しいクラスがあり、その後置き換えることができsys.stdout
ます。