2009-01-02 42 views
1

默認情況下,Python的子進程模塊將所有打開的文件描述符傳遞給它所產生的任何子進程。這意味着如果父進程在端口上偵聽並被終止,它將無法重啓並重新開始偵聽(即使使用SO_REUSEADDR),因爲子進程仍然擁有該描述符。我無法控制子進程。阻止Python子進程在Windows上傳遞fds?

子進程POpen構造函數確實接受close_fds參數,這會關閉子對象上的描述符,就像我想的那樣。但是,只有在Windows上有一個限制,如果stdin/stdout也被覆蓋了,那麼這個限制就不能使用了,我需要這樣做。

有沒有人知道在Windows上解決這個問題?

回答

2

什麼似乎是最相關的信息,我可以找到:SetHandleInformation,引用this文章,應該給你指針。

你可能需要使用pywin32和/或ctypes來完成你想要的。

-2

我沒有窗口框,所以這是未經測試的,但我會試圖嘗試os.dup和os.dup2方法;複製文件描述符並使用它們而不是父文件描述符。

+0

我不確定我是否理解;我將重複哪些描述符,以及我將如何使用它們? – DNS 2009-01-02 21:26:06