#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 )