2

我在 Windows XP 上使用 Python 2.7。

我的脚本依赖 tempfile.mkstemp 和 tempfile.mkdtemp 来创建大量具有以下模式的文件和目录:

_,_tmp = mkstemp(prefix=section,dir=indir,text=True)

<do something with file>

os.close(_)

运行脚本总是会引发以下错误(尽管确切的行号发生了变化等)。脚本尝试打开的实际文件会有所不同。

OSError: [Errno 24] Too many open files: 'path\\to\\most\\recent\\attempt\\to\\open\\file'

关于如何调试它的任何想法?另外,如果您想了解更多信息,请告诉我。谢谢!

编辑:

这是一个使用示例:

out = os.fdopen(_,'w')
out.write("Something")
out.close()

with open(_) as p:
    p.read()
4

2 回答 2

3

_您调用时存储的值可能与os.close(_)创建临时文件时存储的值不同。尝试分配给命名变量而不是_.

如果您可以提供一个非常小的代码片段来演示错误,如果对您和我们都有帮助。

于 2012-08-31T17:04:21.833 回答
2

为什么不使用tempfile.NamedTemporaryFiledelete=False?这允许您使用 python 文件对象,这是一个好处。此外,它可以用作上下文管理器(它应该负责确保文件正确关闭的所有细节):

with tempfile.NamedTemporaryFile('w',prefix=section,dir=indir,delete=False) as f:
     pass #Do something with the file here.
于 2012-08-31T14:55:20.737 回答