Запретить подпроцессу Python передавать fds в Windows?
-
03-07-2019 - |
Вопрос
Модуль подпроцесса Python по умолчанию передает все открытые файловые дескрипторы любым дочерним процессам, которые он порождает.Это означает, что если родительский процесс прослушивает порт и прерывается, он не может перезапуститься и начать прослушивание снова (даже используя SO_REUSEADDR), потому что дочерний процесс все еще владеет этим дескриптором.Я не имею никакого контроля над дочерним процессом.
Конструктор POpen подпроцесса принимает аргумент close_fds, который закрывает дескрипторы дочернего элемента, как я и хочу.Однако существует ограничение, только в Windows, которое предотвращает его использование, если stdin / stdout также переопределены, что мне нужно сделать.
Кто-нибудь знает об обходном пути для этого в Windows?
Решение
Какая информация кажется мне наиболее релевантной, которую я могу найти: Sethandleинформация, упомянутый в это статья, которая должна дать вам рекомендации.
Вероятно, вам потребуется использовать pywin32 и / или ctypes для достижения того, что вы хотите.
Другие советы
У меня нет окна Windows, так что это непроверено, но у меня было бы желание попробовать методы os.dup и os.dup2;дублируйте файловые дескрипторы и используйте их вместо родительских.