Python Glossary English

Python 3.4+Windowsosфункция

os.set_handle_inheritable()

os — файловые дескрипторы

Задаёт флаг наследуемости дескриптора Windows (HANDLE) дочерними процессами; доступна только на Windows, для обычных fd используйте os.set_inheritable().

Синтаксис

os.set_handle_inheritable(handle, inheritable, /)

Меняет флаг наследования у хендла Windows, а не у номера дескриптора C. С Python 3.4 создаваемые хендлы по умолчанию не наследуются, и эта функция нужна, чтобы явно отдать хендл дочернему процессу. Помните, что наследуются все помеченные хендлы — в subprocess для точечной передачи есть STARTUPINFO.lpAttributeList с handle_list.

Примеры

import os
print(hasattr(os, 'set_handle_inheritable') == (os.name == 'nt'))   # → True (функция есть только на Windows)
if os.name == 'nt':
    import msvcrt
    fd = os.open(os.devnull, os.O_RDONLY)
    os.set_handle_inheritable(msvcrt.get_osfhandle(fd), True)   # разрешить наследование хендла
    os.close(fd)
r, w = os.pipe()
os.set_inheritable(r, True)    # кроссплатформенный аналог для обычных fd
print(os.get_inheritable(r))   # → True
os.close(r); os.close(w)

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности