📜  javascript中的readline(1)

📅  最后修改于: 2023-12-03 14:42:40.162000             🧑  作者: Mango

JavaScript中的readline

在JavaScript中,可以使用readline模块来实现从命令行读取输入。readline模块是Node.js中的核心模块,可以在各种场景中使用,比如交互式命令行工具、自动化脚本等等。下面,我们将详细介绍使用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接口,否则程序会一直等待用户输入。

readline模块的常用方法

除了上面介绍的rl.question方法外,readline模块还提供了许多其他方法,下面我们一一介绍。

rl.setPrompt(prompt)

设置命令行提示符。当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事件,当用户输入一行文字后,会执行回调函数并输出用户输入的内容。

rl.on(event, callback)

监听事件。readline模块支持多种事件,但最常用的事件是lineclose事件。

  • 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事件,执行回调函数并输出“输入结束”。

rl.prompt([preserveCursor])

在命令行输出提示符,并开始等待用户输入。如果指定了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事件,执行回调函数,并输出“输入结束”。

rl.write(data[, key])

向读取接口写入数据。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接口进行设置和操作,从而实现更加丰富的交互功能。