1

默认情况下,Python 的 subprocess 模块将所有打开的文件描述符传递给它产生的任何子进程。这意味着如果父进程正在侦听端口并被杀死,它无法重新启动并再次开始侦听(即使使用 SO_REUSEADDR),因为子进程仍然拥有该描述符。我无法控制子进程。

子进程 POpen 构造函数确实接受一个 close_fds 参数,它会关闭子进程上的描述符,就像我想要的那样。但是,仅在 Windows 上存在一个限制,如果 stdin/stdout 也被覆盖,则无法使用它,我需要这样做。

有谁知道在 Windows 上解决此问题的方法?

4

2 回答 2

2

什么似乎是我能找到的最相关的信息:本文中引用的SetHandleInformation应该给你指点。

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

于 2009-01-02T23:11:48.293 回答
-2

我周围没有 windows 框,所以这是未经测试的,但我很想尝试 os.dup 和 os.dup2 方法;复制文件描述符并使用它们而不是父描述符。

于 2009-01-02T21:15:14.737 回答