回答:
` followed by an
実際の改行文字を出力したいときに、リテラルn`が返されました。
また、カウントダウンなど、同じ行のメッセージを上書きする場合は、文字列の最後に「\ r」を追加できます。
process.stdout.write("Downloading " + data.length + " bytes\r");
process.stdout.write("Downloading " + data.length + " bytes\033[0G");
\033
進リテラルで\x1b
、このように:\x1b[0G
。(厳密および非厳密なコードの両方で動作するもの)
Windowsコンソール(Linuxの場合も)では'\r'
、同等のコードに置き換える必要があります\033[0G
。
process.stdout.write('ok\033[0G');
これは、VT220端末エスケープシーケンスを使用して、カーソルを最初の列に送信します。
[\] 39
し、カーソルが最初の文字で強調表示されています:var spinner = '|/-\\'.split('');process.stdout.write("["+this.randomElement(spinner)+"] "+message+"\033[0G");
man console_codes
(Linuxまたはオンライン)にあり、私のお気に入りのリファレンスはwww2.phys.canterbury.ac.nz/dept/docs/manuals/unix/DEC_4.0e_Docs/…(その内容の99%はまだ機能しています)です。 。注意のみ:広く展開する前に、いくつかの異なる端末での実験をテストする準備をしてください。
行を上書きできることに関して上記の@rodowiによって行われたすばらしい追加への拡張/強化として:
process.stdout.write("Downloading " + data.length + " bytes\r");
コードで見たように、ターミナルカーソルを最初の文字に配置したくない場合は、次のことを検討してください。
let dots = ''
process.stdout.write(`Loading `)
let tmrID = setInterval(() => {
dots += '.'
process.stdout.write(`\rLoading ${dots}`)
}, 1000)
setTimeout(() => {
clearInterval(tmrID)
console.log(`\rLoaded in [3500 ms]`)
}, 3500)
\r
次の印刷ステートメントの前にを配置することにより、置換文字列が前の文字列を上書きする直前にカーソルがリセットされます。
util.printも使用できます。読む:http : //nodejs.org/api/util.html#util_util_print
util.print([...])#同期出力関数。プロセスをブロックし、各引数を文字列にキャストしてから、stdoutに出力します。各引数の後に改行を入れません。
例:
// get total length
var len = parseInt(response.headers['content-length'], 10);
var cur = 0;
// handle the response
response.on('data', function(chunk) {
cur += chunk.length;
util.print("Downloading " + (100.0 * cur / len).toFixed(2) + "% " + cur + " bytes\r");
});
util.print
は現在廃止されています
(node:7616) DeprecationWarning: util.print is deprecated. Use console.log instead.
ストリクトモードを使用すると、次のエラーが発生しました。
ノードエラー:「オクタルリテラルは厳密モードでは許可されていません。」
次のソリューションが機能します(ソース)。
process.stdout.write("received: " + bytesReceived + "\x1B[0G");
console.log
印刷\n
していました。