¿Impedir que el subproceso Python pase fds en Windows?
-
03-07-2019 - |
Pregunta
El módulo de subproceso de Python de forma predeterminada pasa todos los descriptores de archivos abiertos a los procesos secundarios que genera. Esto significa que si el proceso principal está escuchando en un puerto y se cancela, no se puede reiniciar y comenzar a escuchar nuevamente (incluso utilizando SO_REUSEADDR) porque el niño todavía está en posesión de ese descriptor. No tengo control sobre el proceso hijo.
El constructor de POpen de subproceso acepta un argumento close_fds, que cerraría los descriptores en el hijo, tal como quiero. Sin embargo, hay una restricción, solo en Windows, que evita que se use si también se anulan stdin / stdout, lo que debo hacer.
¿Alguien sabe de una solución para esto en Windows?
Solución
Lo que parece ser la información más relevante que puedo encontrar: SetHandleInformation , que se menciona en este artículo , debe darle consejos.
Probablemente necesitará usar pywin32 y / o ctypes para lograr lo que quiere.
Otros consejos
No tengo un cuadro de ventanas alrededor, así que esto no está probado, pero estaría tentado de probar los métodos os.dup y os.dup2; duplique los descriptores de archivo y use esos en lugar de los principales.