📅  最后修改于: 2023-12-03 14:42:40.162000             🧑  作者: Mango
在JavaScript中,可以使用readline
模块来实现从命令行读取输入。readline
模块是Node.js中的核心模块,可以在各种场景中使用,比如交互式命令行工具、自动化脚本等等。下面,我们将详细介绍使用readline
模块的方法及功能。
为了使用readline
模块,首先需要在代码中引入该模块:
const readline = require('readline');
引入后,可以创建一个readline.Interface
对象来实现从命令行读取输入。例如,以下代码通过readline
模块从标准输入流中读取用户输入,并将输入的内容打印到控制台:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('请输入一段文字:', (answer) => {
console.log(`你输入的文字是:${answer}`);
rl.close();
});
在上面的代码中,通过readline.createInterface
方法创建了一个Interface
对象,并指定了输入流(process.stdin
)和输出流(process.stdout
)。其中,process.stdin
表示标准输入流,即命令行中用户输入的内容。而process.stdout
则表示标准输出流,即输出到控制台的内容。
接着,使用rl.question
方法来向用户询问一段文字,并在用户输入回答后执行回调函数。回调函数中,可以获取用户输入的内容,并进行处理。最后要记得调用rl.close
方法关闭readline
接口,否则程序会一直等待用户输入。
除了上面介绍的rl.question
方法外,readline
模块还提供了许多其他方法,下面我们一一介绍。
设置命令行提示符。当readline
开始等待用户输入时,会先输出该提示符。例如:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.setPrompt('请输入一个数值:');
rl.prompt();
rl.on('line', (input) => {
console.log(`你输入的数值是:${input}`);
rl.close();
});
在上面的代码中,使用rl.setPrompt
方法设置了提示符为“请输入一个数值:”,然后调用rl.prompt
方法显示提示符。接着,使用rl.on
方法监听line
事件,当用户输入一行文字后,会执行回调函数并输出用户输入的内容。
监听事件。readline
模块支持多种事件,但最常用的事件是line
和close
事件。
line
事件表示用户输入了一行文字,会执行回调函数并传递用户输入的内容作为参数。close
事件表示readline
接口已关闭,会执行回调函数并清空接口缓存的输入数据。例如:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', (input) => {
console.log(`你输入了:${input}`);
});
rl.on('close', () => {
console.log('输入结束');
});
在上面的代码中,使用rl.on
方法分别监听了line
事件和close
事件,并为每个事件指定了对应的回调函数。当用户输入文字时,会触发line
事件,执行回调函数并输出用户输入内容。当用户结束输入后,会触发close
事件,执行回调函数并输出“输入结束”。
在命令行输出提示符,并开始等待用户输入。如果指定了preserveCursor
参数为true
(默认为false
),则会在等待用户输入时保留光标位置。
例如:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.prompt();
rl.on('line', (input) => {
console.log(`你输入了:${input}`);
rl.prompt();
});
rl.on('close', () => {
console.log('输入结束');
});
在上面的代码中,使用rl.prompt
方法输出命令行提示符,并开始等待用户输入。当用户输入完一行文字后,会触发line
事件,并执行回调函数,输出用户输入内容,并继续等待下一条输入。当用户结束输入并按下Ctrl+C
时,会触发close
事件,执行回调函数,并输出“输入结束”。
向读取接口写入数据。data
参数表示要写入的数据,可以是字符串或二进制数据。key
参数是一个可选的键名,表示将该数据视为按键操作。
例如,以下代码将字符串“hello”写入到当前的命令行:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.write('hello\n');
rl.close();
在上面的代码中,使用rl.write
方法写入字符串“hello”并自动换行,然后调用rl.close
方法关闭读取接口。
使用readline
模块可以方便地从命令行读取用户输入,并进行相应的处理。要使用readline
模块,首先需要引入该模块,然后创建一个readline.Interface
对象来实现交互式命令行。通过各种方法和事件,可以对readline
接口进行设置和操作,从而实现更加丰富的交互功能。