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

2024-09-29 04:30:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

子进程POpen构造函数确实接受close_fds参数,这将关闭子进程上的描述符,正如我所希望的那样。但是,有一个限制,仅在Windows上,它阻止在stdin/stdout也被覆盖的情况下使用它,我需要这样做。在

有人知道在Windows上解决这个问题的方法吗?在


Tags: 模块文件端口close参数so进程windows
2条回答

我周围没有windows设备,所以这还没有经过测试,但是我很想尝试一下操作系统.dup以及操作系统2方法;复制文件描述符并使用这些描述符而不是父描述符。在

我能找到的最相关的信息是:SetHandleInformation,在this文章中引用,应该会给你一些提示。在

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

相关问题 更多 >