Как «перегрузить» функцию печати python «глобально»?

Я использую 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.

Имея это в виду, я хотел бы иметь возможность запустить пару строк выше и иметь print, чтобы делать то, что NewPrint делает во время всего выполнения скрипта. Прямо сейчас, если я вызову функцию из другого модуля, который использует печать, она будет использовать встроенную печать, а не ту, которую я только что переписал. Я думаю, это как-то связано с пространствами имен и встроенными модулями, но мой python недостаточно хорош.

Редактировать:

Я старался быть простым, но, похоже, это вызвало еще большую путаницу ...

Функция, которая перегружает печать, будет печатать в 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» это функция C ++, предоставляемая через оболочку Swig.

Мы используем только стандартную библиотеку и наши собственные оболочки swig, также наши разработчики используют print как функцию (привыкая к 3.X). Поэтому я не особо беспокоился о каком-то другом модуле, вызывающем print и имеющем что-то другое.

Из всех комментариев я предполагаю, что использование функции print_ () вместо print () (что мы и делаем в настоящее время) может быть лучшим, но мне стало очень любопытно посмотреть, можно ли в python сделать то, что я описано.

Ответы на вопрос(2)

Ваш ответ на вопрос