Wie kann man die Druckfunktion von Python "global" "überladen"?

Ich verwende Python 2.6.6 und muss die Standard-Python-Druckfunktion überladen. Ich muss es tun, weil dieser Code auf einem System verwendet werden kann, auf dem eine integrierte Funktion zum Generieren der Ausgabe verwendet werden muss, andernfalls wird keine Ausgabe angezeigt.

Also, nur zum Beispiel, wenn Sie ein Python-Skript wie dieses haben:

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")

Es funktioniert gut. Die Eingabe für den "überladenen" Ausdruck erfolgt in der von NewPrint angegebenen Datei.

In diesem Sinne möchte ich in der Lage sein, die obigen Zeilen auszuführen und zu drucken, um das zu tun, was NewPrint während der gesamten Ausführung des Skripts tut. Wenn ich jetzt eine Funktion eines anderen Moduls aufrufe, das print verwendet, wird der eingebaute print verwendet und nicht der, den ich gerade überschrieben habe. Ich denke, das hat etwas mit Namespaces und eingebauten Funktionen zu tun, aber meine Python ist nicht gut genug.

Bearbeiten:

Ich habe versucht, mich einfach zu halten, aber es sieht so aus, als würde das mehr Verwirrung stiften ...

Die Funktion, die das Drucken überlastet, wird auf einer GUI gedruckt, sodass die Umleitung keine Rolle spieltOB Die Funktion ist überlastet.

Ich weiß, dass mein Beispiel nicht das tut, was die Druckfunktion tatsächlich tut. Ein besseres Beispiel dafür, wie ich daran denke, es zu codieren, ist (ich weiß immer noch nicht so gut):

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)

Aus 2 oben können Sie die Funktion sehen, die ich zum Drucken auf der GUI "hli_Print" verwenden muss. Dies ist eine C ++ - Funktion, die über einen Swig-Wrapper verfügbar gemacht wird.

Wir verwenden nur die Standardbibliothek und unsere eigenen Swig-Wrapper, und unsere Entwickler verwenden Print als Funktion (gewöhnungsbedürftig an 3.X). Ich habe mir also keine großen Sorgen darüber gemacht, dass ein anderes Modul print aufruft und stattdessen etwas anderes hat.

Aus all den Kommentaren schätze ich, dass es das Beste ist, nur eine print_ () - Funktion anstelle von print () zu verwenden (was wir derzeit tun), aber ich war sehr gespannt, ob es in Python möglich ist, das zu tun, was ich kann beschrieben.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage