Python Glossary English

Python 3.12+Linuxosфункция

os.setns

os — пространства имён

Присоединяет текущий поток к пространству имён (namespace) по дескриптору (Python 3.12+). Доступно на Linux.

Синтаксис

os.setns(...)

Присоединяет текущий поток к пространству имён другого процесса по дескриптору файла из /proc/PID/ns/ — так устроены инструменты вроде nsenter и docker exec. Требует прав CAP_SYS_ADMIN. Присоединение к некоторым пространствам, например PID, действует только на потомков.

Примеры

import os
fd = os.open('/proc/1/ns/net', os.O_RDONLY)   # → ? только Linux: дескриптор сетевого namespace процесса с PID 1
os.setns(fd, os.CLONE_NEWNET)   # → ? только Linux: текущий поток переходит в этот сетевой namespace (нужны права CAP_SYS_ADMIN)
os.setns(fd)   # → ? nstype=0 по умолчанию: тип namespace не проверяется, берётся из самого дескриптора
ns = open('/proc/self/ns/uts')
os.setns(ns, os.CLONE_NEWUTS)   # → ? только Linux: вместо int можно передать любой объект с методом fileno()
os.setns(ns, os.CLONE_NEWNET)   # → OSError: [Errno 22] Invalid argument — дескриптор UTS не соответствует флагу CLONE_NEWNET

См. также

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

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