繁体   English   中英

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

[英]Prevent Python subprocess from passing fds on Windows?

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

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

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

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

您可能需要使用pywin32和/或ctypes完成所需的操作。

我周围没有窗户,所以未经测试,但是我很想尝试os.dup和os.dup2方法; 复制文件描述符,并使用其代替父描述符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM