Python вывод журнала в файл - PullRequest
       0

Python вывод журнала в файл

4 голосов
/ 17 апреля 2020

У меня есть функция python, которая печатает несколько строк на терминале.

Вот как я выполняю функцию:

python3 test.py

Вот некоторый код из файла:

column1 = "|=========="
        column2 = "|==============================================================="
        column3 = "|==================================="
        column4 = "|======================="

        print("\n"+column1+column2+column3+column4+"|")
        print("|SCRIPT ID    |SCRIPT NAME                                                       |Start Time                         |RUN ID             |")
        print(column1+column2+column3+column4+"|")

В терминале выводится следующее:

|==========|===============================================================|===================================|=======================|
|SCRIPT ID    |SCRIPT NAME                                                       |Start Time                         | RUN ID             |
|==========|===============================================================|===================================|=======================|
|1         |TEST_SCRIPT                                    |2020-04-17 11:46:28.054074+05:30   |201                    |
|==========|===============================================================|===================================|=======================|

Entering - SCRIPT
     Verification Started
     Verification Completed in 0 Hours 00 Min 00.000602 sec
     Methods Execution Started
     Methods Execution Completed
EXITING - SCRIPT

Я хочу сохранить вывод функции в файле журнала. Итак, если я запусту python3 test.py, он должен создать файл с именем test.py-202004171148.log в папке с именем logs, в которой будут храниться все выходные данные в файле.

Как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 17 апреля 2020

сохранить файл с датой и временем:

import datetime
file = open(str(datetime.now().strftime('test.py-%Y%m%d%H%M%S.log')), "w")
file.write("yourlogs")
file.close()
1 голос
/ 17 апреля 2020

для сохранения файла вы можете использовать:

import datetime
file = open("test.py-"+str(datetime.datetime.now().timestamp())+".log", "w")
file.write("yourlogs")
file.close()
1 голос
/ 17 апреля 2020

Добавление этих нескольких строк кода в начало вашего скрипта должно перенаправить весь вывод для печати на консоль И ТАКЖЕ записать в файл

import sys
import datetime

class Printer(object):
    def __init__(self, *files):
        self.files = files
    def write(self, obj):
        for file in self.files:
            file.write(obj)
            file.flush()
    def flush(self):
        for file in self.files:
            file.flush()

f = open(f"{__file__}-{datetime.datetime.now().strftime('%Y%m%d%H%M%S')}.log", 'w')
sys.stdout = Printer(sys.stdout, f)

#Your print statements below
print("Hello world!")
0 голосов
/ 17 апреля 2020

Для этого вы можете использовать модуль logging . Вам придется заменить print() на logging.info(), logging.warning() или logging.error() в зависимости от желаемого уровня журнала.

import logging
from datetime import datetime
fn = datetime.now().strftime('logs/test.py-%Y%m%d%H%M%S.log')
logging.basicConfig(filename=fn, level=logging.INFO)
logging.info('Entering - SCRIPT')
logging.info('etc...')

Формат по умолчанию будет префиксом каждого сообщения с уровнем журнала и регистратором имя. Если вы не хотите этого, вы можете переопределить его с помощью format.

logging.basicConfig(filename=fn, level=logging.INFO, format='%(message)s')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...