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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top