日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Node.js之readline模块的使用

發布時間:2025/7/14 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Node.js之readline模块的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是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 previouslyrl.write(null, {ctrl: true, name: 'u'}); 復制代碼
4、rl.question(query, callback)

??預先制定提示內容query,將會在用戶輸入被應答后,觸發執行指定的回掉函數callback。

rl.question('你今年多大了?\n', function(prompt) {console.log('這是你輸入的回答結果:' + prompt);rl.close();}) 復制代碼
5、rl.pause()

??暫停readline的輸入流,可以恢復,rl.resume()、rl.write()、rl.question()和rl.prompt()均可以恢復該輸入流。 ??調用該方法會觸發pause事件。

6、rl.resume()

??恢復readline的輸入流。 ??調用該方法會觸發resume事件。

7、rl.close()

??關閉readline創建的實例,不控制輸入輸出流。 ??調用該方法會觸發close事件。

事件

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’事件均會被觸發。

7、SIGTSTP(該事件在window系統上不起作用)

??當輸入流收到-Z命令時,我們熟知的SIGTSTP事件就會被觸發。如果沒有注冊SIGTSTP事件監聽器,那么當輸入流收到SIGTSTP事件時,Node.js進程就將會被移動到后臺。 ??如果輸入在進程被發送到后臺之前就已經被暫停了,那么’pause’和’SIGCONT’事件就將不會被觸發。

參見官方文檔 參考案例看笑話readline

總結

以上是生活随笔為你收集整理的Node.js之readline模块的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。