Spec-Zone.ru › Elisp

Функции создания дочерних процессов

Существует три примитива, создающие новый дочерний процесс для запуска программы. Один из них, make-process, создаёт асинхронный процесс и возвращает объект процесса (см. Асинхронные процессы). Другие два, call-process и call-process-region, создают синхронный процесс и не возвращают объект процесса (см. Синхронные процессы). Существуют различные функции более высокого уровня, которые используют эти примитивы для запуска определённых типов процессов.

Синхронные и асинхронные процессы объясняются в следующих разделах. Поскольку три функции вызываются аналогичным образом, их общие аргументы описаны здесь.

Во всех случаях функции указывают программу, которая должна быть запущена. Ошибка сигнализируется, если файл не найден или не может быть выполнен. Если имя файла относительное, переменная exec-path содержит список директорий для поиска. Emacs инициализирует exec-path при запуске, основываясь на значении переменной окружения PATH. Стандартные конструкции имён файлов, ‘~’, ‘.’, и ‘..’, интерпретируются как обычно в exec-path, но подстановки переменных окружения (‘$HOME’ и т. д.) не распознаются; используйте substitute-in-file-name для их выполнения (см. Расширение имён файлов). nil в этом списке относится к default-directory.

Запуск программы также может попытаться добавить суффиксы к указанному имени:

Пользовательский параметр: exec-suffixes

Эта переменная является списком суффиксов (строк), которые нужно попробовать добавить к имени указанного файла программы. В список должен входить "" если вы хотите, чтобы имя проверялось точно так, как указано. Значение по умолчанию зависит от системы.

Обратите внимание: Аргумент program содержит только имя файла программы; он не может содержать какие-либо аргументы командной строки. Вы должны использовать отдельный аргумент args для их предоставления, как описано ниже.

Каждая из функций создания дочерних процессов имеет аргумент buffer-or-name, который указывает, куда будет выводиться вывод программы. Это должен быть буфер или имя буфера; если это имя буфера, то буфер будет создан, если он ещё не существует. Это также может быть nil, что означает отбрасывание вывода, если это не обрабатывается пользовательской функцией фильтра. (См. Функции фильтра и Чтение и вывод.) Обычно следует избегать ситуации, когда несколько процессов отправляют вывод в один и тот же буфер, поскольку их вывод будет произвольно перемешиваться. Для синхронных процессов вы можете направить вывод в файл вместо буфера (и соответствующий аргумент поэтому более уместно называется destination). По умолчанию оба потока стандартного вывода и стандартной ошибки направляются в один и тот же пункт назначения, но все 3 примитива позволяют дополнительно направить поток стандартной ошибки в другое место назначения.

Все три функции создания дочерних процессов позволяют указать аргументы командной строки для запуска процесса. Для call-process и call-process-region, эти аргументы представлены в виде аргумента &rest, args. Для make-process, как программа для запуска, так и её аргументы командной строки указываются в виде списка строк. Аргументы командной строки должны быть строками, и они передаются программе как отдельные строки аргументов. Специальные символы подстановок и другие конструкции оболочки не имеют особого значения в этих строках, поскольку строки передаются непосредственно указанной программе.

Дочерний процесс наследует свою среду из Emacs, но вы можете указать переопределения для неё с помощью process-environment. См. Системная среда. Текущий каталог дочернего процесса определяется значением default-directory.

Переменная: exec-directory

Значение этой переменной — строка, имя каталога, содержащего программы, которые поставляются с GNU Emacs и предназначены для вызова Emacs. Программа movemail является примером такой программы; Rmail использует её для получения новых сообщений из папки входящих.

Пользовательский параметр: exec-path

Значение этой переменной — список каталогов, в которых следует искать программы для запуска в дочерних процессах. Каждый элемент — либо имя каталога (т. е. строка), либо nil, которое обозначает каталог по умолчанию (который является значением default-directory). См. executable-find, для подробностей о данном поиске.

Значение exec-path используется call-process и start-process, когда аргумент program не является абсолютным именем файла.

В целом, вы не должны изменять exec-path напрямую. Вместо этого убедитесь, что ваша переменная окружения PATH установлена должным образом до запуска Emacs. Попытка изменения exec-path независимо от PATH может привести к путанице.

Функция: exec-path

Эта функция является расширением переменной exec-path. Если default-directory указывает на удалённый каталог, эта функция возвращает список каталогов, используемых для поиска программ на соответствующем удалённом хосте. В случае локального default-directory, функция возвращает только значение переменной exec-path.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Subprocess-Creation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API