摘要:引子很多使用開發的工具都會提供一個命令行操作界面,這些工具在執行的過程中會實時更新執行進度或數據的下載解壓縮進度等,例如,這些信息會再終端的同一行的同一位置顯示,而不是一行一行逐次打印顯示那么其是怎么實現的有沒有相應地模塊提供這個功能呢嗯,
引子
很多使用nodejs開發的工具都會提供一個命令行操作界面(CLI),這些工具在執行的過程中會實時更新執行進度或數據的下載解壓縮進度等,例如10%,20%,30%...
這些信息會再終端的同一行的同一位置顯示,而不是一行一行逐次打印顯示......
那么其是怎么實現的?nodejs有沒有相應地模塊提供這個功能呢?
嗯,NodeJS中有的,它就是readline模塊,這個模塊提供了正行數據讀取寫入,終端提示符位置控制等API
實現的功能本文章提供一個樣例代碼,主要說明終端提示符位置控制問題,把需要注意的點都列在其中了
終端字符顯示寬度問題
終端界面能夠顯示的字符區域大小問題
終端當前提示符的位置問題
終端相同位置上內容實時更新的問題
這些問題在樣例中都有涉及及說明到
使用nodejs的readline模塊對命令行控制終端的提示符位置進行控制
模擬詢問用戶是否啟動應用
啟動應用后實時更新運行進度信息從1%~100%,此信息顯示同一行的同一個位置
var readline = require("readline"); var util=require("util"); var inputStream=process.stdin; var outputStream=process.stdout; var rl = readline.createInterface({ input: inputStream, output: outputStream, terminal:true }); var promptStr="MyApp> "; //獲得字符串實際長度,中文2,英文1 //控制臺中中文占用2個英文字符的寬度 var getDisplayLength=function(str) { var realLength = 0, len = str.length, charCode = -1; for (var i = 0; i < len; i++) { charCode = str.charCodeAt(i); if (charCode >= 0 && charCode <= 128) realLength += 1; else realLength += 2; } return realLength; }; //計算一個字符串在當前控制臺中占用的行數和列數信息 //outputStream.rows及outputStream.columns屬性為當前控制臺的顯示的窗口的大寫 var getStrOccRowColumns=function(str){ //str=promptStr+str; var consoleMaxRows=outputStream.rows; var consoleMaxColumns=outputStream.columns; var strDisplayLength=getDisplayLength(str); var rows=parseInt(strDisplayLength/consoleMaxColumns,10); var columns=parseInt(strDisplayLength-rows*consoleMaxColumns,10); return { rows:rows, columns:columns } }; //console.log(getDisplayLength(promptStr)); rl.setPrompt(promptStr); rl.prompt(); rl.question("你想要個啟動應用處理嗎?", function(answer) { rl.prompt(); rl.write(util.format("啟動應用得到的回復為:%s ", answer)); //更新同一個位置顯示的字符信息,每1秒更新1一次,一直到100% var k= 0,max=100,prevOutputContent,outputContent, cursorDx=0,cursorDy= 0,dxInfo; //計算 rl.prompt(); var interval=setInterval(function(){ if(k
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86031.html
摘要:級版目錄進入退出三種模式光標移動文本修改查找替換設置環境進入退出進入命令示例說明進入編輯器,類似于打開文本編輯器軟件用編輯器打開文件 ?級版 目錄1. 進入退出2. 三種模式3. 光標移動4. 文本修改5. 查找替換6. 設置環境1. 進入退出進入命令示例說明vi進入vi編輯器,類...
摘要:按屏幕往后移動半頁。按移動到光標所在行的行首按光標跳到下個字的開頭按光標跳到下個字的字尾按光標回到上個字的開頭按光標移到該行的第個位置,如。例如,,表示移動光標至文章的第行行首。 01:查找和替換 例1:要找about字符串 /about 在命令行輸入/后接要查找的字符串,下一個匹配按n(ext),上一個是N?about 在當前位置找,n跳到前一個匹配/about$ 匹配行尾的a...
閱讀 2632·2019-08-30 15:53
閱讀 2870·2019-08-29 16:20
閱讀 1081·2019-08-29 15:10
閱讀 1018·2019-08-26 10:58
閱讀 2188·2019-08-26 10:49
閱讀 630·2019-08-26 10:21
閱讀 700·2019-08-23 18:30
閱讀 1635·2019-08-23 15:58