Pythonic способ записывать вывод консоли в файл журнала в редакторе Python Spyder - PullRequest
3 голосов
/ 28 июня 2019

Я использую Anaconda и Spyder в качестве среды Python и редактора.Я только что узнал очень простой способ записать простую информацию о печати в файл журнала.Но это кажется довольно нелепым.То, что я сделал, приведено ниже:

import numpy as np
import pandas as pd
import logging


logger = logging.getLogger('test2')
logger.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh = logging.FileHandler('test2.log')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)

ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
ch.setFormatter(formatter)
logger.addHandler(ch)

X = np.array([1,2,3])
print(X)
logger.info(f'{X}')

str1 = 'hello world'
print(str1)
logger.info(str1)

df = pd.DataFrame({'col1': np.arange(40),
                   'col2': np.tile([0,1,2,3],10)
                    })
print(df)
logger.info(f'{df}')

В основном, когда я чувствую необходимость напечатать что-то, я должен добавить одну дополнительную строку кода для регистрации.Может показаться, что это не проблема в этом примере, но если мне нужно напечатать 500+ строк материала в сверхдлинном сценарии, это может быть очень неэффективно.

У меня следующие вопросы:

1) Есть ли обходной путь с несколькими строками кода, чтобы всякий раз, когда я что-то печатал на консоль Spyder, он записывался во внешний файл?Я хотел бы посмотреть, как это делается.

2) Если скрипт python запускается, сначала читая его из внешнего текстового файла и выполняя его, делает ли это запись в журнал отличной от случая, когда скриптработает нормально?

3) Поскольку я использую Anaconda в качестве среды Python и Spyder в качестве IDE, это делает запись в журнале чем-то отличным от использования другого редактора Python и другой среды Python?

Спасибо вadvance

EDIT1: я попытался использовать следующий код

ch = logging.StreamHandler(stream=sys.stdout)
ch.setLevel(logging.DEBUG)

, но, к сожалению, все, что напечатано на консоли Spyder, не копируется во внешний файл.Может быть, я что-то пропустил.

import numpy as np
import pandas as pd

import logging
import sys

logger = logging.getLogger('test3')
logger.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

fh = logging.FileHandler('test3.log')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)

ch = logging.StreamHandler(stream=sys.stdout)
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)

X = np.array([1,2,3])
print(X)

str1 = 'hello world'
print(str1)

df = pd.DataFrame({'col1': np.arange(40),
                   'col2': np.tile([0,1,2,3],10)
                    })
print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...