Отправка ввода процессам
Асинхронные подпроцессы получают ввод, когда им отправляет Emacs, что выполняется с помощью функций в этом разделе. Вы должны указать процесс, которому нужно отправить ввод, и данные ввода, которые нужно отправить. Если подпроцесс выполняет программу, данные отображаются на стандартном входе этой программы; для соединений данные отправляются подключенному устройству или программе.
У некоторых операционных систем ограниченное пространство для буферизованного ввода в pty. В этих системах Emacs периодически отправляет EOF наряду с другими символами, чтобы принудительно их пропустить. Для большинства программ эти EOF не вредят.
Ввод подпроцесса обычно кодируется с помощью системы кодирования, прежде чем подпроцесс получит его, очень похоже на текст, написанный в файл. Вы можете использовать set-process-coding-system для указания используемой системы кодирования (см. Информация о процессе). В противном случае, система кодирования берётся из coding-system-for-write, если она не nil; в противном случае, используется механизм по умолчанию (см. Системы кодирования по умолчанию).
Иногда система не может принять ввод для этого процесса, потому что буфер ввода заполнен. В этом случае функции отправки ожидают немного, принимая вывод от подпроцессов, а затем пробуют снова. Это даёт подпроцессу возможность прочитать больше своего ожидающего ввода и освободить место в буфере. Это также позволяет фильтрам (включая текущий), сторожам и таймерам работать — поэтому учитывайте это при написании кода.
В этих функциях аргумент process может быть процессом или именем процесса, или буфером или именем буфера (что обозначает процесс через get-buffer-process). nil означает процесс текущего буфера.
- Функция: process-send-string process string
-
Эта функция отправляет process содержимое string как стандартный ввод. Она возвращает
nil. Например, чтобы создать список файлов в буфере Shell:(process-send-string "shell<1>" "ls\n") ⇒ nil
- Функция: process-send-region process start end
-
Эта функция отправляет текст в области, определенной start и end, как стандартный ввод в process.
Ошибки возникают, если start и end не являются целыми числами или маркерами, указывающими позиции в текущем буфере. (Неважно, какое число больше).
- Функция: process-send-eof &optional process
-
Эта функция заставляет process увидеть конец файла в его вводе. EOF приходит после любого текста, уже отправленного ему. Функция возвращает process.
(process-send-eof "shell") ⇒ "shell"
- Функция: process-running-child-p &optional process
Эта функция сообщит вам, предоставил ли process, который не должен быть соединением, а реальным подпроцессом, управление своим терминалом дочернему процессу. Если это верно, функция возвращает числовой идентификатор группы процессов переднего плана process; она возвращает
nilесли Emacs может быть уверен, что это не так. Значение равноtесли Emacs не может определить, верно ли это. Функция сигнализирует об ошибке, если process является сетевым, последовательным или конвейерным соединением, или если подпроцесс не активен.
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/Input-to-Processes.html