【问题标题】:Prevent Python subprocess from passing fds on Windows?防止 Python 子进程在 Windows 上传递 fds?
【发布时间】:2010-09-29 07:30:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: python windows subprocess popen


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我不确定我是否理解;我将复制哪些描述符,我将如何/在哪里使用它们?
      • dup'ed 文件描述符使事情变得更糟。他需要相当于 Linux O_CLOEXEC 标志,AFAIK 在 Windows 上不存在。
      猜你喜欢
      • 2021-06-29
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多