2016-04-12 2 views
5

Есть ли способ сохранить весь вывод печати в txt-файле в python? Допустим, у меня есть эти две строки в моем коде, и я хочу сохранить вывод печати в файл с именем output.txt.Направление вывода на печать в файл .txt в Python 3

print ("Hello stackoverflow!") 
print ("I have a question.") 

Я хочу, чтобы файл output.txt содержать в

Hello stackoverflow! 
I have a question. 

ответ

13

Дайте print аргумент в file ключевое слово, где значение аргумента является файлом потока. Мы можем создать поток файла, используя open функцию:

print("Hello stackoverflow!", file=open("output.txt", "a")) 
print("I have a question.", file=open("output.txt", "a")) 

Из Python documentation about print:

file аргумент должен быть объектом с помощью метода write(string); если его нет или None, sys.stdout будет использоваться.

И the documentation for open:

Open file и возвращает соответствующий объект файла. Если файл не открывается, отображается OSError.

"a" как второй аргумент open означает «добавить» - другими словами, не будут перезаписаны существующие содержимое файла. Если вы хотите, чтобы файл был перезаписан вместо этого, используйте "w".

+0

спасибо за этот ответ. Как только первая строка кода (первая печать) выполняется, соответствующий файл закрывается перед выполнением второй команды печати. Правильно? Есть ли способ распечатать много вещей в одном файле, но убедиться, что файл закрыт до выполнения второго цикла цикла? Другими словами, я хотел бы напечатать некоторые вещи в тех же файлах для каждого раунда вокруг цикла с закрывающим файлом между ними. Спасибо, – Allan

+1

@Allan, вы должны использовать оператор 'with', чтобы открыть файл. Это создает объект 'file' и держит его открытым во всем блоке, а затем закрывает его в конце. Посмотрите первый пример [в этой статье] (http://preshing.com/20110920/the-python-with-statement-by-example/). Позвольте мне знать, если у вас есть еще вопросы! –

5

Вы можете перенаправить стандартный вывод в файл "output.txt"


    import sys 
    sys.stdout = open('output.txt','wt') 
    print ("Hello stackoverflow!") 
    print ("I have a question.") 
+3

Есть ли способ сделать это И также показать текст в консоли? Так что одновременно печатайте на консоль и в файл? Я хотел бы видеть все мои отчеты о выполнении печати, чтобы я знал, где находится программа, и инструкции по устранению неполадок, но также имеют все эти дампы для текстового файла. – Korzak

0

Используйте модуль протоколирования

def init_logging(): 
    rootLogger = logging.getLogger('my_logger') 

    LOG_DIR = os.getcwd() + '/' + 'logs' 
    if not os.path.exists(LOG_DIR): 
     os.makedirs(LOG_DIR) 
    fileHandler = logging.FileHandler("{0}/{1}.log".format(LOG_DIR, "g2")) 
    rootLogger.addHandler(fileHandler) 

    rootLogger.setLevel(logging.DEBUG) 

    consoleHandler = logging.StreamHandler() 
    rootLogger.addHandler(consoleHandler) 

    return rootLogger 

Получить регистратор:

logger = init_logging() 

И начать регистрацию/вывода (ing):

logger.debug('Hi! :)') 
Смежные вопросы