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

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

Функция: exec-suffixes

Эта функция возвращает локальное для соединения значение переменной exec-suffixes.

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

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

Все три функции, создающие подпроцессы, позволяют задавать аргументы командной строки для запускаемого процесса. Для 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 напрямую. Вместо этого перед запуском Emacs убедитесь, что переменная окружения PATH задана правильно. Попытка изменить exec-path независимо от PATH может привести к неожиданным результатам.

Функция: exec-path

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

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

Например, вместо запуска emacsclient следует указать значение emacsclient-program-name. Аналогично, вместо запуска movemail необходимо запустить movemail-program-name; то же относится к etags, hexl, rcs2log и ebrowse.

Copyright © 1990-1996, 1998-2026 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