什么是readline
readline允许从可读流中以逐行的方式读取数据,比如process.stdin等。 在node.js命令行模式下默认引入了readline模块,但如果是使用node.js运行脚本的话,则需要自己通过require('readline')方式手动引入该模块。
怎么使用readline
创建实例
首先、创建一个接口实例,提供一个Object类型的参数。参数如下: input: 监听的可读流(必需) output: 写入readline的可写流(必需) completer: 用于 Tab 自动补全的可选函数(不常用) terminal: 如果希望 input 和 output 流像 TTY 一样对待,那么传递参数 true ,并且经由 ANSI/VT100 转码。 默认情况下检查 isTTY 是否在 output 流上实例化。(不常用) historySize: 保留行历史纪录最大值,为了禁用该值被设置为0,默认为30,只有在terminal被设置为true或通过一个内部输出检查时,这个选项才有作用,否则历史缓存机制不会初始化。(不常用)
第一种方式:只传入两个必传参数
const readLine = require('readline'); let rl = readLine.createInterface(process.stdin, process.stdout);
第二种方式:可以传入其他非必需参数
const readLine = require('readline'); let rl = readLine.createInterface({ input: process.stdin, output: process.stdout, // 其他参数省略 })
实例
const readLine = require('readline'); let rl = readLine.createInterface({ input: process.stdin, output: process.stdout, prompt: '> 请输入' }) // 调用 rl.prompt(); // 控制台结果显示:>请输入
注意:一旦该代码被调用,Node.js程序将不会终止知道readline接口被关闭,因为接口会在输入流中不停的等待数据。
方法
以下所有的实例均依据如下rl所创建:
const readLine = require('readline'); let rl = readLine.createInterface({ input: process.stdin, output: process.stdout })
1、rl.setPrompt([prompt])
设置提示符,当你使用node运行该文件,并且调用rl.prompt()时,会在终端看到你设置的提示prompt,即“> 请输入”
rl.setPrompt('> 请输入')
注意:该方法和上面的实例参数配置是一样的效果
2、rl.prompt([preserveCursor])
为用户输入准备好readline,将现有的setPrompt选项放到新的一行,让用户有一个新的地方开始输入。将preserveCursor设为true来防止光标位置被重新设定成0。 如需要换行输入,即在新的一行,输入信息,可在prompt中加入\n。
rl.prompt(); // 控制台结果显示:>请输入
3、rl.write(data[, key])
当使用readline.createInterface()创建实例时,,如果输入流为null或者undefined,则写入数据到输出流。 key是一个表示键序列的字面量对象,如果终端是TTY,则可用。
rl.write('Delete me!'); // Simulate ctrl+u to delete the line written previously rl.write(null, {ctrl: true, name: 'u'});
4、rl.question(query, callback)
预先制定提示内容query,将会在用户输入被应答后,触发执行指定的回掉函数callback。
rl.question('你今年多大了"color: #ff0000">事件
1、line事件
无论何时,在输入流接收了一个行结束符(\n, \r, 或者 \r\n)时触发,即在用户输入后,按了回车或者返回键时触发该事件。可以用来监听用户输入。
rl.on('line', function (line) { console.log('这是用户输入的内容:' + line); })2、pause事件
输入流被暂停时触发,即调用了rl.pause(),或者没有暂停输入流,在收到SIGCONT/SIGINT,且readline.Interfacce实例上并没有注册SIGCONT/SIGINT监听器时,也会被触发,并且如果输入流在收到SIGTSIP之前就已经被暂停了,那么该事件也不会触发。
rl.on('pause', function() { console.log('暂停输入流...') })3、resume事件
输入流重新启动时被触发,即调用了rl.resume()、或者rl.write()、rl.question()和rl.prompt()。
rl.on('resume', function() { console.log('恢复输入流...') })4、close事件
调用rl.close()方法时会触发该事件,或者输入流接收到“结束”事件。以下的任意一种情况都会触发close事件。 一旦close事件被触发,则认为readline.Interaface实例已经终止。 1)、rl.close()方法被调用后,readline.Interaface实例便会放弃输入输出流的控制权。 2)、输入流接收到自己的“end”事件。 3)、输入流接收到-C,发送SIGINT信号,并且在readline.Interfacce实例上并没有注册SIGINT事件的监听器。 4)、输入流接收到-D,发送传输结束信号(EOF,end-of-transmission); 5)、EOT:定界符,即输入单个或多个“>”,并按下回车时。
rl.on('close', function() { console.log('关闭输入流...'); process.exit(0); // 退出当前进程 })5、SIGCOUT(该事件在window系统上不起作用)
当使用-Z将Node.js进程移动到后台时,SIGCONT事件将会被触发。然后可以使用 fg(1) 命令将它移动到前台。 如果输入流在收到SIGTSIP之前就已经被暂停了,那么该事件就不会触发。
6、SIGINT
当输入流收到-C命令时,我们熟知的SIGINT事件就会被触发。如果当时并没有注册任何SIGINT事件监听器,那么当输入流接收到SIGINT信号时,'pause'事件和'close'事件均会被触发。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]