我想修补 python popen2,它试图通过在[3, SC_OPEN_MAX]
.
这意味着,如果有人将使用上限ulimit
增加到 1,000,000 之类的巨大值,它将使任何使用 popen 有效阻塞的 python 应用程序。
问题的重点是:如何获取进程的打开文件处理程序列表。该解决方案至少应该适用于 linux 和 Windows。
注意:这是为了重新修复http://bugs.python.org/issue1663329
我想修补 python popen2,它试图通过在[3, SC_OPEN_MAX]
.
这意味着,如果有人将使用上限ulimit
增加到 1,000,000 之类的巨大值,它将使任何使用 popen 有效阻塞的 python 应用程序。
问题的重点是:如何获取进程的打开文件处理程序列表。该解决方案至少应该适用于 linux 和 Windows。
注意:这是为了重新修复http://bugs.python.org/issue1663329
您的方法不适用于 Windows。实际上 windows 甚至没有可枚举的文件句柄。您的 for-loop 方法经常在 Unix 选择轮询循环中使用,但在 Windows 中却惨遭失败,因为套接字句柄通常 > 0x80000000。
而且,如果我没记错的话,文件句柄在linux中默认是通过exec调用关闭的,我认为在windows中也会发生类似的事情。您必须明确要求获得通过 exec 保持打开状态的句柄。
更新:
这可能很有趣http://bugs.python.org/issue1663329
直到现在我才注意到你在说 popen2 - 如果 python 足够新,你真的应该subprocess
使用