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

发布于 2024-07-10 17:46:14 字数 293 浏览 12 评论 0原文

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

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

有谁知道 Windows 上的解决方法吗?

Python's subprocess module by default passes all open file descriptors to any child processes it spawns. This means that if the parent process is listening on a port, and is killed, it cannot restart and begin listening again (even using SO_REUSEADDR) because the child is still in possession of that descriptor. I have no control over the child process.

The subprocess POpen constructor does accept a close_fds argument, which would close descriptors on the child, just as I want. However, there is a restriction, only on Windows, that prevents it from being used if stdin/stdout are also overridden, which I need to do.

Does anyone know of a work-around for this on Windows?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不羁少年 2024-07-17 17:46:15

我能找到的最相关的信息似乎是: SetHandleInformation,在此文章,应该可以给你指点。

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

What seems to be the most relevant information that I can find: SetHandleInformation, referenced in this article, should give you pointers.

You'll probably need to use pywin32 and/or ctypes to accomplish what you want.

夏见 2024-07-17 17:46:15

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

I don't have a windows box around, so this is untested, but I'd be tempted to try the os.dup and os.dup2 methods; duplicate the file descriptors and use those instead of the parent ones.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文