2015-03-18 2 views
0

Я запускаю скрипт python, и я хочу регистрировать каждый шаг программы python.Как создать файл журнала для регистрации каждого шага в python?

, например, позволяет сказать, что у меня есть программа

def main() 
    if do: 
     do the work 
     if yes: 
      do the work 
      for list os.listdir(dir): 
       sys.system("python " + dirOfPython + " " + dirOflists) 

Я хочу, чтобы войти, где моя программа .. и то, что в настоящее время они делают.

В моем журнале я хочу что-то вроде

Inside of main() 
inside of if do: 
doing work 
inside of if yes: 
doing work 
inside of for each files/dirs calling list 
calling sys.system python 
executing python with give dir path 

не совсем то, что выше .. но какой-то журнал, чтобы увидеть, что делает программа, и если она не этот журнал будет содержать, где, если не удалось бревно сообщение об ошибке

Я просто хочу формальный файл журнала

+0

Его немного неясно, что вы хотите, но, возможно, [многопоточность] (https://docs.python.org/2/library/threading.html) – Jeff

+0

@Jeff I я не уверен, что это правильный пример .. но что-то вроде 'nohup' в linux .. где он записывает весь журнал в nohup.out'. Все, что я хочу сделать, это записать каждый шаг кодирования в некоторый выходной файл .. он может txt или что-то еще. – PETER

+0

Вы говорите неудачу, как обратная линия? Или вы хотите проверить, не получилось ли это? (после многих итераций) –

ответ

1

Вы знаете, есть logging модуль!

import logging 
import os 

logging.basicConfig(filename='tmp.log', 
        format='%(levelname)s %(asctime)s :: %(message)s', 
        level=logging.DEBUG) 
# format is a formatter string, level shows what level of logs it will record 
# in this case it is everything! 
# Levels are as follows from most to least critical 
# CRITICAL 
# ERROR 
# WARNING 
# INFO 
# DEBUG 

do = True 
yes = True 
do_the_work = lambda: None 

def main(): 
    logging.debug("Inside of main()") 
    if do: 
     logging.debug("Inside of if do:") 
     do_the_work() 
     logging.debug("doing work") 
     if yes: 
      logging.debug("inside of if yes:") 
      do_the_work() 
      logging.debug("doing work") 
      for list in os.listdir('.'): # there were three files in my folder 
       logging.debug("inside of for each files/dirs calling list") 
       print('python') 
       logging.debug("calling sys.system python") 
       logging.debug("executing python with give dir path") 

который произведет вывод:

DEBUG 2015-03-18 12:26:59,272 :: Inside of main() 
DEBUG 2015-03-18 12:26:59,272 :: Inside of if do: 
DEBUG 2015-03-18 12:26:59,272 :: doing work 
DEBUG 2015-03-18 12:26:59,272 :: inside of if yes: 
DEBUG 2015-03-18 12:26:59,272 :: doing work 
DEBUG 2015-03-18 12:26:59,272 :: inside of for each files/dirs calling list 
DEBUG 2015-03-18 12:26:59,272 :: calling sys.system python 
DEBUG 2015-03-18 12:26:59,272 :: executing python with give dir path 
DEBUG 2015-03-18 12:26:59,272 :: inside of for each files/dirs calling list 
DEBUG 2015-03-18 12:26:59,272 :: calling sys.system python 
DEBUG 2015-03-18 12:26:59,272 :: executing python with give dir path 
DEBUG 2015-03-18 12:26:59,272 :: inside of for each files/dirs calling list 
DEBUG 2015-03-18 12:26:59,272 :: calling sys.system python 
DEBUG 2015-03-18 12:26:59,272 :: executing python with give dir path 

Вы можете легко поймать исключения и иметь их бросить более важные события.

try: 
    really_important_method() 
except EndOfTheWorldError: 
    logging.critical("Duck and cover boys, it's gonna blow.") 
+0

, где сохраняется журнал? хранит ли он результат в каком-то файле txt или? или это просто печать на экране? – PETER

+0

'logging.basicConfig (filename = 'path/to/the/log/file.txt', ...)' –

+0

есть способ, которым вам не нужно писать logging.debug (....)? он просто регистрирует, где он находится и что он делает? .. также .. когда я запускаю свою оригинальную программу, он выводит какую-то строку .. как я могу хранить, чем в журнале? Я попробовал свое кодирование ... он не сохраняет результат. – PETER

0

Я думаю, что в программе вы должны знать, что выполняется в настоящее время и что поток программы и где это нарушение, это где журналы приходят в картину. Для этого вы можете использовать эту библиотеку функций.

(УСТАНОВКА) Установите его с помощью следующей команды:

pip install function-logger 

(ИМПОРТ Statement) Внутри вашего импорта кода этой библиотеки

from function_logger import function_logger 

(ИСПОЛЬЗОВАНИЕ), как использовать Используйте его, как декоратор, для любой функции, для которой вы хотите видеть журналы:

@function_logger(logger) 
def log_function(name=None, age=None): 
    logger.debug("Inside log function") 
    return dict(bmi=19) 

Выход:

Inside Function log_function with parameters:(),{'name': 'hello', 'age': 23'} 
Inside log function 
Function: log_function returns 19 
Смежные вопросы