Команда pyinstaller —clean xyz.spec, exe создается успешно, но при выполнении не входит в консоль

#python #pyinstaller

Вопрос:

После создания exe-файла при запуске exe-файла приложение немедленно завершает работу, хотя оно обрабатывается в фоновом режиме. Я вижу, что через некоторое время создается файл журнала, но я не вижу никакого входа в консоль. Я попытался добавить явный обработчик ведения журнала sys.out, но это тоже не сработало. Вот мой код для входа в систему

 def set_logger(logname, logLevel):
    try:
        # set log level for console output
        log_format = ('%(levelname)s - %(asctime)s - %(module)s - Line number %(lineno)d - %(message)s')
        bold_seq = '33[1m'
        colorlog_format = (
            f'{bold_seq} '
            '%(log_color)s '
            f'{log_format}'
        )
        colorlog.basicConfig(stream=sys.stdout, format=colorlog_format)
        logger = logging.getLogger()
        logLevelSwitch = {
            "debug": logging.DEBUG,
            "info": logging.INFO,
            "warning": logging.WARNING,
            "error": logging.ERROR,
            "critical": logging.CRITICAL,
        }
        logger.setLevel(logLevelSwitch.get(logLevel.lower()))
        # create file handler which will log to a file
        fh = logging.FileHandler(logname)
        fh.setLevel(logLevelSwitch.get(logLevel.lower()))
        formatter = logging.Formatter('%(levelname)s - %(asctime)s - %(module)s - Line number %(lineno)d - %(message)s')
        fh.setFormatter(formatter)
        logger.addHandler(fh)
    except Exception as e:
        print(list([str(datetime.datetime.now()), 'FUNCTION_NAME:setlogger, ERROR_MSG:', str(e)]))
 

Файл входа в систему работает правильно, но когда я запускаю exe-файл либо через powershell, либо через cmd, он просто немедленно завершается, и ведение журнала не отображается в консоли.

Ответ №1:

Таким образом, проблема была в файле спецификации. Поэтому, когда я запускаю команду pyinstaller —clean xyz.spec, в файле спецификаций есть свойство под названием exe, и это свойство принимает параметр, называемый console. По умолчанию для него было установлено значение false. Когда я установил значение true, ведение журнала консоли начало работать, и исполняемый файл просто не вышел, как это было раньше. Это содержимое свойства exe в файле спецификации:

 exe = EXE(pyz,
      a.scripts,
      a.binaries,
      a.zipfiles,
      a.datas,
      [],
      name='omst_batch_checks',
      debug=False,
      bootloader_ignore_signals=False,
      strip=False,
      upx=True,
      upx_exclude=[],
      runtime_tmpdir=None,
      console=True )