2012-05-17 53 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代替

相關問題