Prevenir Python subprocesso de passar fds no Windows?
-
03-07-2019 - |
Pergunta
módulo subprocesso do Python por padrão passa todos os descritores de arquivos abertos a qualquer criança processos que ele gera. Isto significa que se o processo pai é escutando em uma porta, e é morto, não pode reiniciar e começar a ouvir novamente (mesmo usando SO_REUSEADDR) porque a criança ainda está em posse desse descritor. Eu não tenho nenhum controle sobre o processo filho.
O Popen construtor subprocess não aceita um argumento close_fds, que iria fechar descritores sobre a criança, assim como eu quero. No entanto, há uma restrição, apenas no Windows, que impede que ele seja usado se stdin / stdout também são substituídas, o que eu preciso fazer.
Alguém sabe de uma solução alternativa para isso no Windows?
Solução
O que parece ser a informação mais relevante que eu possa encontrar: SetHandleInformation , referenciado no este artigo , deve dar-lhe ponteiros.
Você provavelmente precisará usar pywin32 e / ou ctypes para realizar o que você quer.
Outras dicas
Eu não tenho um windows caixa ao redor, de modo que este não foi testado, mas eu estaria tentado a experimentar os métodos os.dup e os.dup2; duplicar os descritores de arquivo e usar aqueles em vez dos pais.