pyinstaller 打包之后,运行无法生成log文件,是为什么?
在没有打包成EXE文件之前是可以正常生成log文件的,用pyinstaller打包之后,再点击运行exe文件,却无法生成log文件夹了。exe运行正常,就是程序报错时无法把错误信息打印到log文件中。
pyinstaller打包之后生成的warn*.txt
这是程序调用的log模块
import os
import time
import logging
import traceback
logging.basicConfig(level=logging.INFO)
class LOG(object):
def __init__(self, logger):
self.fileHandlerName = ''
self.fileHandler = None
self.loggerName = logger
self.logger = logging.getLogger(logger)
self.logger.setLevel(logging.DEBUG)
self.formatter = logging.Formatter("=========ntime:%(asctime)s nlogger:%(name)s nlevel:%(levelname)s "
"nfile:%(filename)s nfun:%(funcName)s nlineno:%(lineno)d "
"\n nmessage:%(message)s")
# 控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(self.formatter)
self.logger.addHandler(ch)
path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'log', self.loggerName)
print('log path=', path)
def setfh(self):
fname = time.strftime("%Y%m%d%H%M")
if fname != self.fileHandlerName:
# 移除原来的句柄
if self.fileHandler is not None:
self.logger.removeHandler(self.fileHandler)
# 设置日志文件保存位置
path = os.path.join(os.path.abspath(os.path.dirname(__file__)) , 'log',self.loggerName)
print(path)
if not os.path.isdir(path):
os.makedirs(path)
fh = logging.FileHandler(path + fname + '.log')
fh.setLevel(logging.DEBUG)
fh.setFormatter(self.formatter)
self.logger.addHandler(fh)
self.fileHandlerName = fname
self.fileHandler = fh
# 格式化日志内容
def _fmtInfo(self, msg):
if len(msg) == 0:
msg = traceback.format_exc()
return msg
else:
_tmp = [msg[0], traceback.format_exc()]
return '\n**********\n'.join(_tmp)
# 封装方法
def debug(self, *msg):
_info = self._fmtInfo(msg)
try:
self.setfh()
self.logger.debug(_info)
except:
print('mylog debug:' + _info)
def error(self, *msg):
_info = self._fmtInfo(msg)
try:
self.setfh()
self.logger.error(_info)
except:
print('mylog error:' + _info)
def info(self, *msg):
_info = self._fmtInfo(msg)
try:
self.setfh()
self.logger.error(_info)
except:
print('mylog info:' + _info)
def warning(self, *msg):
_info = self._fmtInfo(msg)
try:
self.setfh()
self.logger.error(_info)
except:
print('mylog warning:' + _info)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
其实有生成log文件,但是不是在exe文件所在的文件夹内。
path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'log', self.loggerName)
问题在这一句代码。
os.path.dirname(__file__)返回的是当前脚本的所在路径,使用pycharm和直接点击运行py文件,这个路径均为脚本的所在路径,而生成exe之后点击运行,这个路径变为exe释放路径C:Users...AppDataLocalTemp_MEI*,所以log文件生成在这个路径下,在结束运行后,这个路径文件夹会被删除。
最后改这句代码为
参考http://blog.csdn.net/pipisorr...
此博文得到解决方案
获取当前目录用
os.getcwd()
而不是os.path.dirname(__file__)