2012-05-17 22 views
0

我想修补python popen2,它试图通过在[3, SC_OPEN_MAX]上进行循环来关闭所有打开的文件句柄。如何检测为了关闭而打开的所有文件处理程序?

这意味着如果某人使用ulimit增加了一个像1,000,000这样的巨大值的上限,它将使任何使用popen来有效阻止的python应用程序。

问题的关键在于:你如何得到你的进程打开的文件处理程序列表。至少,该解决方案应该在Linux和Windows上工作。

注:这是重新固定http://bugs.python.org/issue1663329

回答

1

你的做法不会在Windows上运行。其实Windows甚至没有可枚举的文件句柄。您的for-loop方法经常用于Unix select-poll循环,但在Windows中失败了,因为套接字句柄通常> 0x80000000。

但是,如果我没有记错,文件句柄在Linux中被exec调用默认关闭,我想在Windows中会发生类似的情况。你将不得不明确要求通过exec来获得一个处于开放状态的句柄。

UPDATE:

这可能会感兴趣http://bugs.python.org/issue1663329

也只有现在我注意到,您说popen2的 - 如果蟒蛇够新,你真的应该使用subprocess代替

相关问题