Python 2.6.6 を使用していますが、デフォルトの Python 印刷機能をオーバーロードする必要があります。このコードは、組み込み関数を使用して出力を生成する必要があるシステムで使用される可能性があるため、実行する必要があります。そうしないと、出力が表示されません。
たとえば、次のような python スクリプトがあるとします。
from __future__ import print_function
def NewPrint(Str):
with open("somefile.txt","a") as AFile:
AFile.write(Str)
def OverloadPrint():
global print
print = NewPrint
OverloadPrint()
print("ha")
それは正常に動作します。「オーバーロードされた」印刷への入力は、NewPrint で指定されたファイルにあります。
それを念頭に置いて、上記の数行を実行し、スクリプトの実行全体で NewPrint が行うことを print で実行できるようにしたいと考えています。現在、print を使用する別のモジュールから関数を呼び出すと、上書きしたばかりではなく、組み込みの print が使用されます。これは名前空間と組み込みに関係があると思いますが、私の python は十分ではありません。
編集:
シンプルにしようとしましたが、これによりさらに混乱が生じたようです...
- print をオーバーロードする関数は GUI に出力するため、関数がオーバーロードされている場合はリダイレクトを気にする必要はありません。
私の例は、印刷機能が実際に行うことをしていないことを知っています。私がコーディングについてどのように考えているかのより良い例は次のとおりです(まだ素晴らしいとは言えません):
def hli_print(*args, **kw): """ print([object, ...], sep=' ', end='\n', file=sys.stdout) """ sep = kw.get('sep', ' ') end = kw.get('end', '\n') File = kw.get('file', sys.stdout) args = [str(arg) for arg in args] string = sep.join(args) + end File.write(string) hli_Print(string)
上記の 2 から、GUI "hli_Print" に出力するために使用しなければならない関数を見ることができます。これは、swig ラッパーを通じて公開される C++ 関数です。
- 標準ライブラリと独自の swig ラッパーのみを使用し、開発者は print を関数として使用します (3.X に慣れるまで)。そのため、他のモジュールが print を呼び出して代わりに別のものを持っていることについて、あまり心配していませんでした。
すべてのコメントから、print() の代わりにいくつかの print_() 関数を使用するのが最善かもしれないと思います (これは現在私たちが行っていることです)。説明された。