Предотвратить Python подпроцесс от передачи FDS на Windows? - PullRequest
1 голос
/ 03 января 2009

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

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

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

Ответы [ 2 ]

2 голосов
/ 03 января 2009

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

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

0 голосов
/ 03 января 2009

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

...