Jak „przeładować” funkcję drukowania pythona „globalnie”?
Używam Pythona 2.6.6 i muszę przeciążyć domyślną funkcję drukowania Pythona. Muszę to zrobić, ponieważ ten kod może być używany w systemie, w którym wbudowana funkcja musi być używana do generowania danych wyjściowych, w przeciwnym razie nie jest wyświetlane żadne wyjście.
Tak więc, na przykład, jeśli masz taki skrypt Pythona:
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")
To działa dobrze. Dane wejściowe do „przeciążonego” wydruku znajdują się w pliku określonym przez NewPrint.
Mając to na uwadze, chciałbym móc uruchomić kilka wierszy powyżej i wydrukować, aby zrobić to, co robi NewPrint podczas całego wykonywania skryptu. Teraz, jeśli wywołam funkcję z innego modułu, który używa drukowania, użyje wbudowanego wydruku, a nie tego, który właśnie nadpisałem. Myślę, że ma to coś wspólnego z przestrzeniami nazw i wbudowanymi, ale mój python nie jest wystarczająco dobry.
Edytować:
Próbowałem zachować prostotę, ale wygląda na to, że spowodowało to więcej zamieszania ...
Funkcja przeciążająca druk zostanie wydrukowana na GUI, więc nie trzeba przejmować się przekierowaniemJEŚLI funkcja jest przeciążona.Wiem, że mój przykład nie robi tego, co faktycznie robi funkcja drukowania. Lepszym przykładem tego, jak myślę o kodowaniu jest (wciąż nie wiem, jakie to wspaniałe):
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)
Od 2 powyżej możesz zobaczyć funkcję, której muszę użyć, aby wydrukować do GUI „hli_Print”, która jest funkcją C ++ wystawioną przez opakowanie typu swig.
Używamy tylko standardowej biblioteki i naszych własnych paczek, także nasi programiści używają funkcji drukowania jako funkcji (przyzwyczajając się do 3.X). Tak więc nie martwiłem się zbytnio o inne wywołanie modułu i zamiast tego miałem coś innego.Ze wszystkich komentarzy sądzę, że po prostu użycie funkcji print_ () zamiast print () (co właśnie robimy) może być najlepsze, ale naprawdę ciekawiło mnie, czy w pythonie można zrobić to, co ja opisany.