Как автоматически направлять вывод операторов печати в файл в python?

У меня есть скрипт на Python, он содержит операторы print здесь и там для целей отладки. Теперь мне трудно читать их в консоли. Есть ли в python какие-либо библиотеки, которые автоматически направляют все выходные данные операторов print в указанный текстовый файл? Кстати, я использую Windows 7, а не Linux. Я также не запускаю свои сценарии из командной строки.

Итак, я хочу что-то вроде ниже:

import logger_module

log_file = "log.txt"
logger_module.activate_logging(log_file)

print "blablabla"

Когда я запускаю приведенный выше скрипт, я должен увидеть "blablabla" в файле log.txt.


person alwbtc    schedule 03.01.2014    source источник
comment
Как насчет использования перенаправления? python script_name.py > output.txt   -  person falsetru    schedule 03.01.2014
comment
Перенаправление работает на windows 7   -  person jgritty    schedule 03.01.2014
comment
Вы можете использовать модуль logging.   -  person    schedule 03.01.2014
comment
Но я хочу запустить скрипт внутри скрипта, а не из командной строки.   -  person alwbtc    schedule 03.01.2014
comment
@Набла, пожалуйста, объясните, как использовать модуль ведения журнала в этом случае.   -  person alwbtc    schedule 03.01.2014
comment
@alwbtc Делайте logging.log вызовы вместо распечаток, это не должно было решить вашу конкретную проблему, но кажется подходящим для отладки   -  person    schedule 03.01.2014
comment
run the script inside the script ? Вы имеете в виду subprocess ?   -  person falsetru    schedule 03.01.2014
comment
Нет, я имею в виду, откройте скрипт с помощью IDLE, затем нажмите кнопку запуска на панели инструментов.   -  person alwbtc    schedule 03.01.2014
comment
Более долгий, но, вероятно, лучший подход — убедить сопровождающих этого кода использовать пакет logging.   -  person erikbwork    schedule 03.01.2014
comment
Почему использование модуля logging лучше, чем ответ Мэдисон Мэй ниже?   -  person alwbtc    schedule 06.01.2014


Ответы (1)


Я считаю, что это самое близкое, что вы получите:

import sys
sys.stdout = open('file', 'w')
print 'test' # prints test to file

Если вы хотите писать в несколько мест, вы можете использовать следующее. Любой объект с методом записи может быть назначен sys.stdout в python.

import sys

class Logger(object):
    def __init__(self, *files):
        self.files = files

    def write(self, obj):
        for f in self.files:
            f.write(obj)

f = open('file', 'w')
sys.stdout = Logger(f, sys.stdout)

print "Python Magic"
person Madison May    schedule 03.01.2014
comment
Здорово. Не могли бы вы показать, как писать как в консоль, так и в файл? Потому что ваш ответ просто записывается в файл. - person alwbtc; 03.01.2014
comment
Конечно вещь. Проверьте мой обновленный ответ. - person Madison May; 03.01.2014
comment
Спасибо за редактирование, но я не имел в виду несколько файлов, я хотел сказать, как писать и в файл, и в окно оболочки? - person alwbtc; 03.01.2014
comment
Этот код должен работать для этой цели. Окно оболочки — это более или менее файл в том смысле, что вы можете писать в него. Попробуйте и дайте мне знать, если это работает для вас. - person Madison May; 03.01.2014
comment
Сэр, спасибо. Обрабатывают ли большие программные проекты Python такие журналы? - person alwbtc; 03.01.2014