Readline javascript что это
Readline
Note that once you’ve invoked this module, your node program will not terminate until you’ve closed the interface. Here’s how to allow your program to gracefully exit:
readline.createInterface(options)
Creates a readline Interface instance. Accepts an «options» Object that takes the following values:
The completer function is given the current line entered by the user, and is supposed to return an Array with 2 entries:
An Array with matching entries for the completion.
The substring that was used for the matching.
Also completer can be run in async mode if it accepts two arguments:
createInterface is commonly used with process.stdin and process.stdout in order to accept user input:
Once you have a readline instance, you most commonly listen for the «line» event.
If terminal is true for this instance then the output stream will get the best compatibility if it defines an output.columns property, and fires a «resize» event on the output if/when the columns ever change ( process.stdout does this automatically when it is a TTY).
Class: Interface
The class that represents a readline interface with an input and output stream.
rl.setPrompt(prompt)
rl.prompt([preserveCursor])
This will also resume the input stream used with createInterface if it has been paused.
rl.question(query, callback)
Prepends the prompt with query and invokes callback with the user’s response. Displays the query to the user, and then invokes callback with the user’s response after it has been typed.
This will also resume the input stream used with createInterface if it has been paused.
rl.pause()
Pauses the readline input stream, allowing it to be resumed later if needed.
rl.resume()
Resumes the readline input stream.
rl.close()
Closes the Interface instance, relinquishing control on the input and output streams. The «close» event will also be emitted.
rl.write(data[, key])
This will also resume the input stream if it has been paused.
Events
Event: ‘line’
Example of listening for line :
Event: ‘pause’
Emitted whenever the input stream is paused.
Also emitted whenever the input stream is not paused and receives the SIGCONT event. (See events SIGTSTP and SIGCONT )
Example of listening for pause :
Event: ‘resume’
Emitted whenever the input stream is resumed.
Example of listening for resume :
Event: ‘close’
Emitted when close() is called.
Event: ‘SIGINT’
Example of listening for SIGINT :
Event: ‘SIGTSTP’
This does not work on Windows.
The pause and SIGCONT events will not be triggered if the stream was paused before the program was sent to the background.
Example of listening for SIGTSTP :
Event: ‘SIGCONT’
This does not work on Windows.
Example of listening for SIGCONT :
Example: Tiny CLI
Here’s an example of how to use all these together to craft a tiny command line interface:
readline.cursorTo(stream, x, y)
Move cursor to the specified position in a given TTY stream.
readline.moveCursor(stream, dx, dy)
Move cursor relative to it’s current position in a given TTY stream.
readline.clearLine(stream, dir)
Clears current line of given TTY stream in a specified direction. dir should have one of following values:
readline.clearScreenDown(stream)
Clears the screen from the current position of the cursor down.
Русские Блоги
Использование модуля readline и утилиты Node.js
В этой статье в основном рассказывается об использовании модуля readline Node.js и модуля util, он очень всеобъемлющий, дотошный и имеет определенную справочную ценность. Друзья, которым он нужен, могут обратиться к нему для изучения. Если есть недостатки, критика и исправления приветствуются.
#1. Используйте модуль readline для построчного чтения потоковых данных.
1.1 Создание объекта интерфейса
1.2 Использование объекта интерфейса для чтения файла построчно
Содержимое исходного файла fs.js
Содержимое сгенерированного файла anotherFs.js
2. Используйте некоторые методы из модуля util
+ метод форматирования
Подобно методу printf в языке C, первое значение параметра используется в качестве строки формата, а другие значения параметра используются в качестве параметров в строке формата, Вернуть отформатированный string.util.format (‘Вы ввели% d параметров, значения параметров:% s,% s,% s’, 3, ‘nice’, ‘excelent’, ‘holy «);
В строке формата вы можете использовать параметры для указания символа
Вывод
Спасибо за просмотр, если есть недостатки, критика и исправления приветствуются.
На этот раз я рекомендую бесплатную обучающую группу для всех, которая суммирует разработку веб-сайтов для мобильных приложений, css, html, webpack, vue node angular и ресурсы для интервью.
Студенты, которые интересуются технологиями веб-разработки, могут присоединиться к группе Q: 864305860, будь вы Xiaobai или Daniel, я приветствую их и набор эффективных путей обучения Daniel. Поделитесь учебным пособием с вами бесплатно и обновляйте информацию о видео каждый день.
Наконец, я желаю вам всем успехов в учебе как можно скорее, получите удовлетворительное предложение, быстро продвиньтесь по службе и поднимите свою зарплату, и вернитесь к вершине своей жизни.
Node.js v17.1.0 documentation
Readline #
Source Code: lib/readline.js
The readline module provides an interface for reading data from a Readable stream (such as process.stdin ) one line at a time.
To use the promise-based APIs:
To use the callback and sync APIs:
The following simple example illustrates the basic use of the readline module.
Once this code is invoked, the Node.js application will not terminate until the readline.Interface is closed because the interface waits for data to be received on the input stream.
Class: InterfaceConstructor #
Instances of the InterfaceConstructor class are constructed using the readlinePromises.createInterface() or readline.createInterface() method. Every instance is associated with a single input Readable stream and a single output Writable stream. The output stream is used to print prompts for user input that arrives on, and is read from, the input stream.
Event: ‘close’ #
The ‘close’ event is emitted when one of the following occur:
The listener function is called without passing any arguments.
The InterfaceConstructor instance is finished once the ‘close’ event is emitted.
Event: ‘line’ #
The listener function is called with a string containing the single line of received input.
Event: ‘history’ #
The ‘history’ event is emitted whenever the history array has changed.
The primary purpose is to allow a listener to persist the history. It is also possible for the listener to change the history object. This could be useful to prevent certain lines to be added to the history, like a password.
Event: ‘pause’ #
The ‘pause’ event is emitted when one of the following occur:
The listener function is called without passing any arguments.
Event: ‘resume’ #
The ‘resume’ event is emitted whenever the input stream is resumed.
The listener function is called without passing any arguments.
Event: ‘SIGCONT’ #
If the input stream was paused before the SIGTSTP request, this event will not be emitted.
The listener function is invoked without passing any arguments.
The ‘SIGCONT’ event is not supported on Windows.
Event: ‘SIGINT’ #
The listener function is invoked without passing any arguments.
Event: ‘SIGTSTP’ #
The ‘pause’ and ‘SIGCONT’ events will not be emitted if the input was paused before the process was sent to the background.
The listener function is invoked without passing any arguments.
The ‘SIGTSTP’ event is not supported on Windows.
rl.close() #
The rl.close() method closes the InterfaceConstructor instance and relinquishes control over the input and output streams. When called, the ‘close’ event will be emitted.
Calling rl.close() does not immediately stop other events (including ‘line’ ) from being emitted by the InterfaceConstructor instance.
rl.pause() #
The rl.pause() method pauses the input stream, allowing it to be resumed later if necessary.
Calling rl.pause() does not immediately pause other events (including ‘line’ ) from being emitted by the InterfaceConstructor instance.
rl.prompt([preserveCursor]) #
The rl.prompt() method writes the InterfaceConstructor instances configured prompt to a new line in output in order to provide a user with a new location at which to provide input.
When called, rl.prompt() will resume the input stream if it has been paused.
If the InterfaceConstructor was created with output set to null or undefined the prompt is not written.
rl.question(query[, options], callback) #
When called, rl.question() will resume the input stream if it has been paused.
If the InterfaceConstructor was created with output set to null or undefined the query is not written.
The callback function passed to rl.question() does not follow the typical pattern of accepting an Error object or null as the first argument. The callback is called with the provided answer as the only argument.
Using an AbortController to cancel a question.
rl.resume() #
The rl.resume() method resumes the input stream if it has been paused.
rl.setPrompt(prompt) #
The rl.setPrompt() method sets the prompt that will be written to output whenever rl.prompt() is called.
rl.getPrompt() #
rl.write(data[, key]) #
If key is specified, data is ignored.
When called, rl.write() will resume the input stream if it has been paused.
If the InterfaceConstructor was created with output set to null or undefined the data and key are not written.
The rl.write() method will write the data to the readline Interface ‘s input as if it were provided by the user.
rl[Symbol.asyncIterator]() #
Added in: v11.4.0, v10.16.0
Symbol.asyncIterator support is no longer experimental.
Create an AsyncIterator object that iterates through each line in the input stream as a string. This method allows asynchronous iteration of InterfaceConstructor objects through for await. of loops.
Errors in the input stream are not forwarded.
Performance is not on par with the traditional ‘line’ event API. Use ‘line’ instead for performance-sensitive applications.
readline.createInterface() will start to consume the input stream once invoked. Having asynchronous operations between interface creation and asynchronous iteration may result in missed lines.
rl.line #
Value will always be a string, never undefined.
The current input data being processed by node.
This can be used when collecting input from a TTY stream to retrieve the current value that has been processed thus far, prior to the line event being emitted. Once the line event has been emitted, this property will be an empty string.
Be aware that modifying the value during the instance runtime may have unintended consequences if rl.cursor is not also controlled.
If not using a TTY stream for input, use the ‘line’ event.
One possible use case would be as follows:
rl.cursor #
This will track where the current cursor lands in the input string, when reading input from a TTY stream. The position of cursor determines the portion of the input string that will be modified as input is processed, as well as the column where the terminal caret will be rendered.
rl.getCursorPos() #
Returns the real position of the cursor in relation to the input prompt + string. Long input (wrapping) strings, as well as multiple line prompts are included in the calculations.
Promises API #
Class: readlinePromises.Interface #
Instances of the readlinePromises.Interface class are constructed using the readlinePromises.createInterface() method. Every instance is associated with a single input Readable stream and a single output Writable stream. The output stream is used to print prompts for user input that arrives on, and is read from, the input stream.
rl.question(query[, options]) #
When called, rl.question() will resume the input stream if it has been paused.
If the readlinePromises.Interface was created with output set to null or undefined the query is not written.
Using an AbortController to cancel a question.
Class: readlinePromises.Readline #
new readlinePromises.Readline(stream[, options]) #
rl.clearLine(dir) #
rl.clearScreenDown() #
The rl.clearScreenDown() method adds to the internal list of pending action an action that clears the associated stream from the current position of the cursor down. Call rl.commit() to see the effect of this method, unless autoCommit: true was passed to the constructor.
rl.commit() #
The rl.commit() method sends all the pending actions to the associated stream and clears the internal list of pending actions.
rl.cursorTo(x[, y]) #
rl.moveCursor(dx, dy) #
rl.rollback() #
readlinePromises.createInterface(options) #
The readlinePromises.createInterface() method creates a new readlinePromises.Interface instance.
Once the readlinePromises.Interface instance is created, the most common case is to listen for the ‘line’ event:
If terminal is true for this instance then the output stream will get the best compatibility if it defines an output.columns property and emits a ‘resize’ event on the output if or when the columns ever change ( process.stdout does this automatically when it is a TTY).
Use of the completer function #
The completer function takes the current line entered by the user as an argument, and returns an Array with 2 entries:
The completer function can also returns a
, or be asynchronous:
Callback API #
Class: readline.Interface #
Instances of the readline.Interface class are constructed using the readline.createInterface() method. Every instance is associated with a single input Readable stream and a single output Writable stream. The output stream is used to print prompts for user input that arrives on, and is read from, the input stream.
rl.question(query[, options], callback) #
When called, rl.question() will resume the input stream if it has been paused.
If the readline.Interface was created with output set to null or undefined the query is not written.
The callback function passed to rl.question() does not follow the typical pattern of accepting an Error object or null as the first argument. The callback is called with the provided answer as the only argument.
Using an AbortController to cancel a question.
readline.clearLine(stream, dir[, callback]) #
The stream’s write() callback and return value are exposed.
readline.clearScreenDown(stream[, callback]) #
The stream’s write() callback and return value are exposed.
The readline.clearScreenDown() method clears the given TTY stream from the current position of the cursor down.
readline.createInterface(options) #
The signal option is supported now.
The history option is supported now.
The tabSize option is supported now.
Remove max limit of crlfDelay option.
The crlfDelay option is supported now.
The prompt option is supported now.
The historySize option can be 0 now.
The readline.createInterface() method creates a new readline.Interface instance.
Once the readline.Interface instance is created, the most common case is to listen for the ‘line’ event:
If terminal is true for this instance then the output stream will get the best compatibility if it defines an output.columns property and emits a ‘resize’ event on the output if or when the columns ever change ( process.stdout does this automatically when it is a TTY).
When creating a readline.Interface using stdin as input, the program will not terminate until it receives EOF ( Ctrl + D on Linux/macOS, Ctrl + Z followed by Return on Windows). If you want your application to exit without waiting for user input, you can unref() the standard input stream:
Use of the completer function #
The completer function takes the current line entered by the user as an argument, and returns an Array with 2 entries:
The completer function can be called asynchronously if it accepts two arguments:
readline.cursorTo(stream, x[, y][, callback]) #
The stream’s write() callback and return value are exposed.
readline.moveCursor(stream, dx, dy[, callback]) #
The stream’s write() callback and return value are exposed.
readline.emitKeypressEvents(stream[, interface]) #
The readline.emitKeypressEvents() method causes the given Readable stream to begin emitting ‘keypress’ events corresponding to received input.
Optionally, interface specifies a readline.Interface instance for which autocompletion is disabled when copy-pasted input is detected.
If the stream is a TTY, then it must be in raw mode.
This is automatically called by any readline instance on its input if the input is a terminal. Closing the readline instance does not stop the input from emitting ‘keypress’ events.
Example: Tiny CLI #
The following example illustrates the use of readline.Interface class to implement a small command-line interface:
Example: Read file stream line-by-Line #
A common use case for readline is to consume an input file one line at a time. The easiest way to do so is leveraging the fs.ReadStream API as well as a for await. of loop:
Alternatively, one could use the ‘line’ event:
Currently, for await. of loop can be a bit slower. If async / await flow and speed are both essential, a mixed approach can be applied:
Русские Блоги
[Node.js личные заметки для изучения] [Читать статьи] 1. Readline простое использование однострочного и многострочного ввода
О readline
Используйте readline
Перед использованием readline нам нужно изменить интерфейсный класс в readline.закрыть событие илинейное событие Имейте простое понимание.
I. «линия»:
Когда входной поток получает терминатор строки («\ n», «\ r» или «\ r \ n»), событие строки запускается. Обычно оно запускается после нажатия пользователем клавиши [Enter] ( На Mac это клавиша [Return].) Когда вызывается событие, функция слушателя возвращает строку строки, введенную на консоли.
Например:
Когда вы набираете «Hello» в консоли, консоль выводитВы вошли: Привет 。
Обратите внимание: Если в это время событие закрытия не используется, программа не завершится.
«Закрыть» событие:
Ниже приведено введение в событие close в официальной API-документации Node.js. В одном предложении оно сводится к следующему:
Когда экземпляр readline.Interface выполняет событие close, экземпляр readline.Interface заканчивается.
Например, создайте экземпляр readline.Interface и вызовите событие ‘line’. Если событие close не вызывается, событие ‘line’, вызываемое программой, не заканчивается, и когда вызывается событие close Только когда экземпляр readline.Interface заканчивается.
readline для однострочного ввода и вывода
Конкретные модули кода следующие:
Сначала нам нужно импортировать модуль readline, затем создать экземпляр readline.Interface, затем вызвать событие line, чтобы дождаться входной информации, запустить блок кода после получения temp входной информации, а затем выполнить событие close для завершения экземпляра readline.Interface.
Пример 1 для достижения a + b = c
Формат ввода консоли:
Example: 10 20
Числа разделяются пробелом
Выполнить снимок экрана:
Здесь строковое событие также можно заменить на событие вопроса. Поскольку автор не совсем понял событие вопроса, если необходимо, перейдите к официальной документации API node.js для получения подробных инструкций.
readline реализует операции многострочного ввода
(1) Многострочный ввод с записью параметров
Конкретный шаблон выглядит следующим образом:
Пример: несколько строк ввода a + b = c
Схема действия эффекта:
знак: Здесь я установил lineCounts на 4
Недостатки: запись параметров
Написание параметров очень неудобно для людей, использующих код. Поэтому этот метод не рекомендуется. Здесь я просто представляю этот метод многострочного ввода с учетом регистра. Очень важно изменять переменные в коде каждый раз, когда код используется Неэффективные вещи.
(2) Консольные пользовательские линии
Идея: используйте значение первой строки, введенное консолью, в качестве числа строк, которые можно ввести в следующей консоли, и запишите содержимое следующей консоли в новый массив, чтобы упростить код Блок обработки.
Конкретный код шаблона:
Пример работы шаблона:
Как показано на рисунке, автор вводит в консоль значение 5, а затем консоль позволяет вводить 5 строк содержимого. После ввода 5 строк содержимого массив результатов печатается и выводится.
Реализация процесса:
Сначала установите в первой строке ввода количество строк, разрешенное консолью. Известно, что массив linesArray используется для хранения каждой строки ввода консоли и требуемой Содержимое отличается от первого элемента, поэтому цикл for in используется для последовательного добавления каждого элемента в подстроке linesArray к результирующему массиву resultArray, который является подстрокой linesArray, полученным после linesArray.slice (1). (Примечание. После выполнения метода slice () объекта Array исходный массив не изменяется, но linesArray.slice (1) представляет массив linesArray после удаления первого элемента.) Наконец, определите, установлено ли число строк, введенных после количества строк. Равен первому элементу массива linesArray, если он равен, завершить экземпляр readline.Interface.
Пример: многострочный ввод пользовательского номера строки a + b = c
Запустить скриншот:
Минусы: этот метод недостаточно гибок.
Хотя я могу настроить количество введенных строк, код не является кратким и понятным, и два метода многострочного ввода, которые я считаю немного глупыми, я также попробовал несколько экземпляров readline.Interface, то есть одну readline. Экземпляр интерфейса для пробуждения других экземпляров readline.Interface, код не написан из-за ограниченных возможностей.
Кстати, мой код основан наnode.js10.11 Версия, старая версия не пыталась запустить ее. Здесь я надеюсь, что если у читателя есть лучший код, я мог бы также поделиться им с автором, я хочу узнать больше, или если у читателя есть какие-либо предложения, пожалуйста, не стесняйтесь написать автору или оставить сообщение в области комментариев. На некоторые материалы и документы API также есть ссылки. Соответствующие ссылки будут завершены в конце статьи. Вышеупомянутые случаи и шаблоны будут загружены в Github и Baidu Cloud Disk после выпуска блога.
Исходный код:
Так как это мой первый Github, и я не знаю, как поделиться ссылкой на файл, я просто скопировал ссылку и изменил ее позже.
2.Baidu облачный диск
Справочные материалы и документы API
(Порядок не важен)
1. блогерzgljl2012из
[Node.js Основы] (9) Используйте модуль readline для реализации ввода и вывода Node.js
2. БлоггерыKatherineLYPиз
Вопросы по онлайн-программированию JavaScript-nodejs получают консольный ввод
3.Node.js официальная документация APIО readline:
4.W3school сайтУчебник JavaScript
5. на MDNТехническая документация JavaScript: