Сообщить об ошибке.

Функция os.posix_spawn() модуля os в Python

API библиотеки C posix_spawn()

Синтаксис:

import os

os.posix_spawn(path, argv, env, *, file_actions=None, setpgroup=None, 
               resetids=False, setsid=False, setsigmask=(), 
               setsigdef=(), scheduler=None)

Параметры:

  • path - путь к исполняемому файлу
  • argv - аргументы CLI исполняемого файла
  • env - среда исполнения
  • file_actions=None - описывает действия, которые необходимо выполнить с определенными файловыми дескрипторами в дочернем процессе между шагами реализации библиотеки C fork() и exec()
  • setpgroup=None - установит для дочерней группы процессов указанное значение
  • resetids=False - если True, то сбросит эффективные UID и GID дочернего процесса на реальные UID и GID родительского процесса
  • setsid=False - если True, то создаст новый идентификатор сеанса для posix_spawn
  • setsigmask=() - будет установлен указанный набор сигналов
  • setsigdef=() - изменит расположение всех сигналов
  • scheduler=None - политику планировщика

Описание:

Добавлено в Python 3.8.

Функция os.posix_spawn() модуля os оборачивает API библиотеки C posix_spawn() для использования из Python.

Большинству пользователей следует использовать os.subprocess.run() вместо os.posix_spawn().

Аргументы, содержащие только позиционные значения, path, args и env аналогичны os.execve(). Допускается использование env=None, и в этом случае используется среда текущего процесса.

Аргумент path - это путь к исполняемому файлу. Путь должен содержать каталог. для передачи исполняемого файла без каталога необходимо использовать os.posix_spawnp().

Аргумент file_actions может представлять собой последовательность кортежей, описывающих действия, которые необходимо выполнить с определенными файловыми дескрипторами в дочернем процессе между шагами реализации библиотеки C fork() и exec(). Первый элемент в каждом кортеже должен быть одним из трех индикаторов типа, перечисленных ниже и описывающих остальные элементы кортежа:

  • os.POSIX_SPAWN_OPEN выполняет os.dup2(os.open(path, flags, mode), fd)

    (os.POSIX_SPAWN_OPEN, fd, path, flags, mode)

  • os.POSIX_SPAWN_CLOSE выполняет os.close(fd).

    (os.POSIX_SPAWN_CLOSE, fd)

  • os.POSIX_SPAWN_DUP2 выполняет os.dup2(fd, new_fd).

    (os.POSIX_SPAWN_DUP2, fd, new_fd)

  • os.POSIX_SPAWN_CLOSEFROM выполняет os.closerange(fd, INF).

    (os.POSIX_SPAWN_CLOSEFROM, fd)

Эти кортежи соответствуют вызовам API библиотеке C posix_spawn_file_actions_addopen(), posix_spawn_file_actions_addclose(), posix_spawn_file_actions_adddup2() и posix_spawn_file_actions_addclosefrom_np(), используемым для подготовки к самому вызову posix_spawn().

Аргумент setpgroup установит для дочерней группы процессов указанное значение. Если указанное значение равно 0, то идентификатор группы дочерних процессов будет таким же, как и идентификатор его процесса. Если значение setpgroup не задано, то дочерний процесс унаследует идентификатор родительской группы процессов. Этот аргумент соответствует флагу библиотеки C POSIX_SPAWN_SETPGROUP.

Если в аргументе resetids указано True, то это приведет к сбросу эффективных UID и GID дочернего процесса на реальные UID и GID родительского процесса. Если аргумент равен False, то дочерний элемент сохраняет действующие UID и GID родительского элемента. В любом случае, если биты разрешений set-user-ID и set-group-ID включены для исполняемого файла, их действие переопределит настройку действующих UID и GID. Этот аргумент соответствует флагу библиотеки C POSIX_SPAWN_RESETIDS.

Если аргумент setsid равен True, то это создаст новый идентификатор сеанса для posix_spawn. setsid требует флаг POSIX_SPAWN_SETSID или POSIX_SPAWN_SETSID_NP. В противном случае возникает исключение NotImplementedError.

В аргументе setsigmask для маски сигнала будет установлен указанный набор сигналов. Если параметр не используется, то дочерний элемент наследует маску сигнала родительского элемента. Этот аргумент соответствует флагу библиотеки C POSIX_SPAWN_SETSIGMASK.

Аргумент setsigdef изменит расположение всех сигналов в указанном наборе. Этот аргумент соответствует флагу библиотеки C POSIX_SPAWN_SETSIGDEF.

Аргумент scheduler должен быть кортежем, содержащим (необязательно) политику планировщика и экземпляр sched_param с параметрами планировщика. Значение None вместо политики планировщика указывает на то, что она не предоставляется. Этот аргумент представляет собой комбинацию флагов библиотеки C POSIX_SPAWN_SETSCHEDPARAM и POSIX_SPAWN_SETSCHEDULER.

Вызывает событие аудита os.posix_spawn с аргументами path, argv, env.

Изменено в Python 3.13: Аргумент env может принимать None. os.POSIX_SPAWN_CLOSEFROM доступно на платформах, где posix_spawn_file_actions_addclosefrom_np() существует.