Spec-Zone.ru › Elisp

Получение вывода процессов

Вывод, который асинхронный подпроцесс записывает в стандартный поток вывода, передается функции, называемой функцией фильтра. Функция фильтра по умолчанию просто вставляет вывод в буфер, называемый буфером процесса (см. Буферы процессов). Если у процесса нет буфера, фильтр по умолчанию отбрасывает вывод.

Если подпроцесс записывает данные в стандартный поток ошибок, по умолчанию вывод ошибок также передается функции фильтра процесса. В качестве альтернативы можно использовать параметр :stderr со значением, отличным от nil, при вызове make-process (см. make-process), чтобы направить вывод ошибок отдельно от стандартного вывода.

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

Вывод подпроцесса может поступать только во время ожидания Emacs: при чтении ввода с терминала (см. функцию waiting-for-user-input-p), в sit-for и sleep-for (см. Ожидание истечения времени или ввода), в accept-process-output (см. Получение вывода процессов), а также в функциях, отправляющих данные процессам (см. Отправка ввода процессам). Это сводит к минимуму проблему ошибок синхронизации, обычно осложняющих параллельное программирование. Например, можно безопасно создать процесс и лишь затем указать его буфер или функцию фильтра: вывод не может поступить до завершения этих действий, если в промежутке код не вызывает примитив, выполняющий ожидание.

Переменная: process-adaptive-read-buffering

В некоторых системах, когда Emacs считывает вывод подпроцесса, данные вывода считываются очень маленькими блоками, что может привести к крайне низкой производительности. В некоторой степени это поведение можно исправить, задав переменной process-adaptive-read-buffering значение, отличное от nil, поскольку это автоматически откладывает чтение данных таких процессов и позволяет им выдать больше данных до того, как Emacs попытается их считать. По умолчанию используется значение nil, так как значение, отличное от nil, снижает производительность.

  • Буферы процессов
  • Функции фильтра процессов
  • Декодирование вывода процессов
  • Получение вывода процессов
  • Процессы и потоки

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/Output-from-Processes.html

Spec-Zone.ru

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