2014-11-07 3 views
0

Я пытаюсь вывести комментарии на консоль python и в то же время сохранять в текстовый файл, и он должен работать рекурсивно. Я нашел код и изменен:print on console и текстовый файл одновременно python

import sys 

def write(input_text): 
    print("Coming through stdout") 
    # stdout is saved 
    save_stdout = sys.stdout 

    fh = open(path,"w") 
    sys.stdout = fh 
    print(input_text) 

    # return to normal: 
    sys.stdout = save_stdout 
    fh.close() 
def testing(): 
    write('go') 

Я повторно использую эту команду и сохраняет только последние полученные данные печати. любой ключ? Спасибо

+0

Я открыт для альтернативы: я нашел это в списке рассылки python, который выглядит хорошо для меня: https://mail.python.org/pipermail/python-list/2007-May/438106.html – schneck

+1

Вы должны попробовать модуль 'logging'. Просто добавьте 'StreamHandler' и' FileHandler' в ваш регистратор ... (см. Также https://docs.python.org/2/howto/logging-cookbook.html#using-logging-in-multiple-modules) – moooeeeep

ответ

0

Вы передаете режим 'w' на функцию open, которая удаляет любой контент в файле. Вы должны использовать режим 'a' для добавления в файл.

Кстати, вы должны рассмотреть возможность использования модуля logging с двумя обработчиками. Один из них записывается в stdout, а другой - в файл. См. logging handlers в документации на python.

0

Все, что вам нужно, это (предполагается, что «путь» определяется уже):

def print_twice(*args,**kwargs): 
    print(*args,**kwargs) 
    with open(path,"a") as f: # appends to file and closes it when finished 
     print(file=f,*args,**kwargs) 

Точно то же самое будет напечатано и записывается в файл. Модуль регистрации является излишним для этой простой задачи.

Пожалуйста, скажите мне, что вы на самом деле не думаете, что запись данных в файл в Python требует возиться с stdout, как в вашем коде. Это было бы смешно.

Смежные вопросы