2016-04-24 1 views
0

У меня есть программа python, которая использует модуль регистрации для вывода данных в текстовый файл, проблема заключается в том, что вывод в текстовый файл отлично работает, когда я запустите сценарий в PyCharm (значения 1-10 выводятся на экран консоли и записываются в Log_Test_File.txt), но когда я запускаю сценарий из командной строки, выводится только вывод консоли (ничто не записывается в * .txt-файл). Это происходит как в Ubuntu, так и на моем Raspberry Pi.Модуль журнала Python - вывод в текстовый файл при запуске из командной строки

Я буду запускать сценарий на Pi автоматически при запуске (как sudo), есть ли способ настроить либо Pi, либо сценарий так, чтобы текстовый вывод работал правильно?

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import logging 

logging.basicConfig(filename="Log_Test_File.txt", 
       level=logging.DEBUG, 
       format='%(levelname)s: %(asctime)s %(message)s', 
       datefmt='%m/%d/%Y %I:%M:%S') 

i=0 
while i<10: 
    logging.info("Logging test: {}".format(i)) 
    i+=1 
+0

Просьба уточнить проблему и любые ошибки. _ "... отлично работает, когда я запускаю скрипт в PyCharm, но не тогда, когда я запускаю скрипт из командной строки" _ является неопределенным. – ChrisP

ответ

1

Код, который вы предоставили, хорошо работает.

Если у вас возникли проблемы с поиском файла журнала должным образом созданы, причины могут быть:

  • не имея разрешения на создание файла журнала
  • скрипт не запускается на всех

Если вы планируете запустить сценарий как долго выполняющийся сервис, я бы рекомендовал пропустить создание явного файла журнала и, скорее, log to stdout. Вывод, отправленный на stdout, легко увидеть, захватить и обработать программой, контролирующей выполнение скрипта (например, supervisord, systemd и т. Д.).

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

+0

Спасибо за ответ. Я предпочел бы использовать модуль регистрации (если это возможно, я могу изменить уровень ведения журнала из DEBUG в INFO, например, это удобно), любая идея о том, что может быть проблемой разрешений или как я изменит его? – AdamDynamic

+0

@AdamDynamic. Вы можете выполнить вход в stdout или stderr со стандартным протоколированием, используя StreamHandler. Что касается проблем с разрешениями - просто убедитесь, что пользователь, который запускает сценарий, может создать файл, где записывается журнал, - например. простым '$ touch the_log_file.log'. Если это не удается, используйте 'chown' или' chmod'. –