阻止Python子进程在Windows上传递fds?

时间:2009-01-02 21:08:43

标签: python windows subprocess popen

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

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

有人知道在Windows上解决此问题吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-2)

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