Запретить подпроцессу Python передавать fds в Windows?

StackOverflow https://stackoverflow.com/questions/408039

Вопрос

Модуль подпроцесса Python по умолчанию передает все открытые файловые дескрипторы любым дочерним процессам, которые он порождает.Это означает, что если родительский процесс прослушивает порт и прерывается, он не может перезапуститься и начать прослушивание снова (даже используя SO_REUSEADDR), потому что дочерний процесс все еще владеет этим дескриптором.Я не имею никакого контроля над дочерним процессом.

Конструктор POpen подпроцесса принимает аргумент close_fds, который закрывает дескрипторы дочернего элемента, как я и хочу.Однако существует ограничение, только в Windows, которое предотвращает его использование, если stdin / stdout также переопределены, что мне нужно сделать.

Кто-нибудь знает об обходном пути для этого в Windows?

Это было полезно?

Решение

Какая информация кажется мне наиболее релевантной, которую я могу найти: Sethandleинформация, упомянутый в это статья, которая должна дать вам рекомендации.

Вероятно, вам потребуется использовать pywin32 и / или ctypes для достижения того, что вы хотите.

Другие советы

У меня нет окна Windows, так что это непроверено, но у меня было бы желание попробовать методы os.dup и os.dup2;дублируйте файловые дескрипторы и используйте их вместо родительских.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top