Question

Par défaut, le module de sous-processus de Python transmet tous les descripteurs de fichiers ouverts à tous les processus enfants qu’il génère. Cela signifie que si le processus parent écoute sur un port et est tué, il ne peut pas redémarrer et recommencer à écouter (même en utilisant SO_REUSEADDR) car l'enfant est toujours en possession de ce descripteur. Je n'ai aucun contrôle sur le processus enfant.

Le constructeur POpen du sous-processus accepte un argument close_fds, qui ferait fermer les descripteurs sur l'enfant, comme je le souhaite. Cependant, il existe une restriction, uniquement sous Windows, qui l'empêche d'être utilisée si les commandes stdin / stdout sont également remplacées, ce que je dois faire.

Quelqu'un connaît-il une solution de contournement pour cela sous Windows?

Était-ce utile?

La solution

Ce qui semble être l'information la plus pertinente que je puisse trouver: SetHandleInformation , référencé dans cet article devrait vous donner des indications.

Vous devrez probablement utiliser pywin32 et / ou ctypes pour accomplir ce que vous voulez.

Autres conseils

Je n'ai pas de boîte de dialogue Windows, cela n'a donc pas été testé, mais je serais tenté d'essayer les méthodes os.dup et os.dup2; dupliquez les descripteurs de fichier et utilisez-les à la place des parents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top