2

我有一个 GUI python 程序和一个简单的错误记录系统

import sys
sys.stderr = open("err.log", "w")

它工作得很好。我遇到的一个问题是,每当我在使用 Windows 7 和 Python 2.7.3 时遇到运行时错误时,只有在我关闭程序后才会写入文件 err.log。阅读我收集的相关问题,我需要在错误发生后对 sys.stderr 执行 flush() 和 os.fsync() ,但我不知道如何轻松做到这一点。

一种方法可能是在程序中可能出现运行时错误的每个可能点之后执行刷新/fsync,但这显然不是一个好的解决方案。使用此错误日志的主要原因是调试,因此根据定义,除了可能出现运行时错误的所有可能位置之外,我无法真正事先知道我需要刷新的位置。由于有很多这样的地方,我宁愿不必尝试/抓住每个地方。

我正在使用 PyGTK,所以我看不到主循环,我可以在其中执行刷新/fsync。

有没有办法告诉 Python 在出错后始终执行刷新和 fsync,或者有没有人有其他想法如何解决这个(小)问题?

4

2 回答 2

1

我同意 syhpoon:logging用于记录。但是如果你真的需要你的安排,请查看第三个buffering参数open来禁用它:

如果给出了缓冲参数,0 表示无缓冲,1 表示行缓冲,较大的数字指定缓冲区大小。打开文件的首选方法是使用内置的 open() 函数。

我试过这个并且它有效。在 Python 会话中:

>>> a = open('/tmp/bar', 'w')
>>> a.write('hi\n')

在另一个术语窗口中:

$ cat /tmp/bar
$

然后我重新运行了禁用缓冲的实验:

>>> a = open('/tmp/bar', 'w', 0)
>>> a.write('hi\n')

和:

$ cat /tmp/var
hi
$

所以使用logging,但如果没有,看看是否只是禁用缓冲会给你你需要的东西。

于 2012-11-21T17:15:52.810 回答
1

也许日志模块是我们更好的日志选择?

于 2012-11-21T17:05:37.617 回答