Python IOError:[Errno 24]打开的文件太多

时间:2014-02-04 05:29:59

标签: python ioerror

我计划将用户代码脚本传递给python logger,使用python bdb运行它,然后将输出记录在文件中。

这是我在python logger中的代码:

  try:
    logger._runscript(script_str)
  except bdb.BdbQuit:
    pass
  finally:
    logger.finalize(filename)

其中logger.finalize在下面定义为函数终结器(输出,文件名)。

bdb将生成一个新线程并在执行后调用以下终结函数:

def finalizer(output, filename): 
  outfile = open(filename , 'a')
  outfile.write(json.dumps(output, indent = 4))
  outfile.close()

这里输出是执行结果,我们将它写入一个带文件名的文件。

我测试了终结器功能中的三条线,它们运行正常。

然而,当从python logger调用它们时,我总是收到以下错误消息:

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'

1 个答案:

答案 0 :(得分:0)

这看起来不像标准库中的记录器。相反,您似乎正在尝试使用提供沙箱环境的第三方library。其中一个限制是它禁止文件访问(参见line 1233)。

如果您自己创建记录器对象,可以通过使用适当的标志创建禁用这些安全检查,例如。

def exec_str_with_user_ns(script_str, user_ns, finalizer_func):
    logger = PGLogger(False, False, False, finalizer_func, disable_security_checks=True)

    try:
        logger._runscript(script_str, user_ns)
    except bdb.BdbQuit:
        pass
    finally:
        return logger.finalize()