日志记录模块导致在另一台计算机上使用区域设置



我正在创建一个更大的python(v3.9(程序,该程序需要在没有安装任何IDE或python(均为Win 10(的不同单核机器上运行。为此,我使用PyInstaller:创建了一个.exe文件

pyinstaller main.py --name myProgram --clean --noconfirm --add-data="data;data" -i "data/Image.ico"

代码在我的主机上运行,但在目标机器上程序崩溃。经过一些调试,我发现崩溃发生在日志记录步骤。我使用日志记录来创建一个简单的日志,当程序从IDE或主机上的.exe启动时,它就可以工作,但当.exe在目标计算机上运行时,它会失败:

import logging
<code>
logging.basicConfig(filename='myProgram.log', format='%(asctime)s - %(levelname)s: %(message)s', datefmt='%d.%m.%y %H:%M:%S', level=logging.INFO)
logging.info("Program started.")
<more code>
print("A")                       # "A" is printed on both machines command lines
logging.info("some message")
print("B")                       # "B" is printed only on main machine, crash on target machine

另外让我困惑的是,我在命令行中看不到任何错误或异常,即使有这样的情况,程序也会停止:

try:
logging.info("some message")
except Exception as e:
print(e)

到目前为止,我无法进一步缩小误差。是什么导致第一条消息的正确日志记录和第二条消息的日志记录尝试崩溃?我感谢任何解决方案的想法,甚至是找到了更好的解决问题的方法。

更新:我找到了崩溃的原因,是使用了区域设置模块,请参阅我的答案。

尝试计算日志文件名的绝对路径,并确保文件所在的目录存在,并且可由创建的程序写入。

我找到了解决方案。在我的代码中添加了几个日志记录语句后,我可以将其缩小到原始帖子中两个日志记录语句之间的另一行:

locale.setlocale(locale.LC_ALL, "de_DE")

在注释了那一行之后,程序运行时没有崩溃。我不知道为什么会发生这种情况,但这个问题也有同样的问题。

相关内容

最新更新