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

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

Выполнить программу с заменой текущего процесса

Функции os.exec*() принимают список аргументов для новой программы, загруженной в процесс. В каждом случае первый из этих аргументов передается новой программе как собственное имя, а не как аргумент, который пользователь мог ввести в командной строке. Для программиста на Си это argv[0], переданный в main() программы. Например, os.execv('/bin/echo', ['foo', 'bar']) будет печатать строку только при стандартном выводе, foo будет казаться проигнорированным.

Синтаксис:

import os

os.execl(path, arg0, arg1, ...)
os.execle(path, arg0, arg1, ..., env)
os.execlp(file, arg0, arg1, ...)
os.execlpe(file, arg0, arg1, ..., env)
os.execv(path, args)
os.execve(path, args, env)
os.execvp(file, args)
os.execvpe(file, args, env)

Параметры:

  • path - str, путь в файловой системе запускаемой программы,
  • arg0, arg1 - аргументы командной строки запускаемой программы,
  • file - str, файла запускаемой программы,
  • args - список аргументов командной строки запускаемой программы,
  • env - dict - переменная среда для выполнения программы.

Возвращаемое значение:

  • None

Описание:

Все эти функции выполняют новую программу, заменяя текущий процесс. Они ничего не возвращают. В Unix новый исполняемый файл загружается в текущий процесс и будет иметь тот же идентификатор процесса, что и вызывающая программа. Ошибки будут сообщаться как исключения OSError.

Текущий процесс заменяется немедленно. Объекты и дескрипторы открытого файла не сбрасываются, поэтому, если в этих открытых файлах могут быть буферизованные данные, то перед вызовом функции os.exec*() необходимо их очистить с помощью sys.stdout.flush() или os.fsync().

Варианты 'l' и 'v' функций exec*() отличаются тем, как передаются аргументы командной строки. С вариантами 'l' работать легче всего, если число параметров фиксировано при написании кода, отдельные параметры просто становятся дополнительными параметрами для функций os.execl*(). Варианты 'v' хороши, когда число параметров является переменным, а аргументы передаются в списке или кортеже в качестве параметра args. В любом случае аргументы дочернего процесса должны начинаться с имени выполняемой команды, но это не применяется.

Варианты, которые включают 'p' в конце (os.execlp(), os.execlpe(), os.execvp() и os.execvpe()), будут использовать переменную среды PATH для определения местоположения файла file программы. Когда среда выполнения заменяется с использованием одного из вариантов os.exec*e(), описанного в следующем параграфе, новая среда выполнения env используется в качестве источника переменной PATH. Другие варианты, os.execl(), os.execle(), os.execv() и os.execve(), не будут использовать переменную PATH для поиска исполняемого файла. Путь должен содержать соответствующий абсолютный или относительный путь.

Для os.execle(), os.execlpe(), os.execve() и os.execvpe(), обратите внимание, что все они заканчиваются на 'e', параметр env должен быть словарем, который используется для определения переменной среды для нового процесса, т. е. env будет использоваться вместо среды текущего процесса. Функции os.execl(), os.execlp(), os.execv() и os.execvp() заставляют новый процесс наследовать среду текущего процесса.

Для os.execve() на некоторых платформах путь path также может быть указан как дескриптор открытого файла. Эта функциональность может не поддерживаться на вашей платформе. Вы можете проверить, доступен ли он, используя os.supports_fd. Если он недоступен, его использование вызовет исключение NotImplementedError.

Все эти функции вызывают событие аудита os.exec с аргументами path, args, env.

Доступность: Unix, Windows.