【发布时间】:2014-02-04 05:29:58
【问题描述】:
我打算将一个用户代码脚本传递给 python logger,使用 python bdb 运行它,然后将输出记录到一个文件中。
这是我在 python 记录器中的代码:
try:
logger._runscript(script_str)
except bdb.BdbQuit:
pass
finally:
logger.finalize(filename)
其中 logger.finalize 在下面定义为函数 finalizer(output, filename)。
bdb 将生成一个新线程并在执行后调用以下终结器函数:
def finalizer(output, filename):
outfile = open(filename , 'a')
outfile.write(json.dumps(output, indent = 4))
outfile.close()
这里的输出是执行结果,我们将它写入一个带有文件名的文件。
我测试了终结器函数中的三行代码,它们运行良好。
但是,当从 python 记录器调用它们时,我总是收到以下错误消息:
IOError: [Errno 24] Too many open files: filename
我只打开一个文件,在其末尾附加一个字符串,然后关闭它。为什么“打开的文件太多”?任何人都可以指出我的问题吗?
这里是 TraceBack 信息:
Traceback (most recent call last):
File "./exec.py", line 95, in <module>
File "./exec.py", line 82, in main
File "./exec.py", line 45, in run
File "path to project/logger.py", line 1321, in exec_script_str
File "path to project/logger.py", line 1292, in finalize
File "./exec.py", line 24, in finalizer
IOError: [Errno 24] Too many open files: 'test01.py'
【问题讨论】:
-
你能显示整个回溯吗?
-
TraceBack 信息已添加,exec.py 中的第 24 行指向 outfile = open(filename , 'a')。我怀疑问题是 pdb 线程无法正确打开/关闭文件?提前致谢!
-
您可能需要检查程序打开文件的其他位置。这可能不是泄漏的来源。
-
感谢您的回复。我已经仔细检查了代码。 Finalizer 是唯一打开文件的函数,每次打开后立即关闭。我还是不知道...
-
script_str怎么样?那是 Python 脚本吗?它会打开任何文件吗?