Python: вход в скрипт модуля для вызова в другом скрипте - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть около 15 различных сценариев Python для разработки приложений, среди которых 10 включают ведение журнала для целей отладки.Теперь есть основной сценарий «hutextract.py», который должен запускаться с именем файла в качестве аргумента.Ранее имя файла журнала было исправлено «test.log».Теперь я хочу создать файл журнала с тем же именем, что и имя входного файла (кроме расширения).Мой код "hutextract.py", где "randpage" и "мандат" - это другие скрипты на python:

from randpage import genrand
from mandatebase import formext
...# importing other scripts, functions
import logging

file_name=sys.argv[1]
def return_log_name():
    return ".".join(file_name.split("/")[-1].split(".")[:-1]) + ".log"

log_file_name = return_log_name()

logging.basicConfig(filename=log_file_name, level=logging.DEBUG, format="%(asctime)s:%(levelname)s:%(message)s")

В randpage.py, mandbase.py и других скриптах логирование также включено туда:

import logging
from hutextract import return_log_name
log_file_name = return_log_name()
logging.basicConfig(filename=log_file_name, level=logging.DEBUG, format="%(asctime)s:%(levelname)s:%(message)s")

Это создает ошибку, которая становится очевидной, когда мы пытаемся запустить hutextract.py с аргументом, который вызывает другие сценарии (и их функции), которые в свою очередь снова вызывают функцию return_log_name из hutextract.py для целей регистрации:

Traceback (most recent call last):
 File "hutextract.py", line 3, in <module>
    from randpage import genrand
 File "/home/src/randpage.py", line 3, in <module>
    from mandate_final import sigext
 File "/home/src/mandate_final.py", line 5, in <module>
    from hutextract import return_log_name
 File "/home/src/hutextract.py", line 3, in <module>
    from randpage import genrand
ImportError: cannot import name 'genrand'

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

1 Ответ

0 голосов
/ 27 декабря 2018

Вы указали ошибку из-за циклического импорта.Вы можете увидеть этот круг в трассировке hutextract.py - randpage.py - mandate_final.py - hutextract.py

Теперь к записи в журнал.Вы должны использовать logging.basicConfig(...) только один раз для нескольких сценариев (в начальном сценарии), потому что эта строка кода изменяет так называемый корневой регистратор модуля регистрации.Этот корневой логгер создается при первом импорте модуля логирования и находится в глобальной области видимости.Таким образом, root logger всегда доступен - просто используйте его как logging.debug('message'), где и когда вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...