キーが押されるまでスクリプトの実行を一時停止する関数が必要です。私はもう試した:
var stdin = process.openStdin();
require('tty').setRawMode(true);
stdin.on('keypress', function (chunk, key) {
process.stdout.write('Get Chunk: ' + chunk + '\n');
if (key && key.ctrl && key.name == 'c') process.exit();
});
しかし、それはただキープレスを聞いているだけで何も起こりません。プログラムは実行を継続しません。
実行を一時停止するにはどうすればよいですか?
私のために働く:
console.log('Press any key to exit');
process.stdin.setRawMode(true);
process.stdin.resume();
process.stdin.on('data', process.exit.bind(process, 0));
Node.js 7.6以降では、これを行うことができます。
const keypress = async () => {
process.stdin.setRawMode(true)
return new Promise(resolve => process.stdin.once('data', () => {
process.stdin.setRawMode(false)
resolve()
}))
}
;(async () => {
console.log('program started, press any key to continue')
await keypress()
console.log('program still running, press any key to continue')
await keypress()
console.log('bye')
})().then(process.exit)
または、CTRL-Cでプログラムを終了し、他のキーで通常の実行を続行したい場合は、代わりに上記の「keypress」関数をこの関数で置き換えることができます。
const keypress = async () => {
process.stdin.setRawMode(true)
return new Promise(resolve => process.stdin.once('data', data => {
const byteArray = [...data]
if (byteArray.length > 0 && byteArray[0] === 3) {
console.log('^C')
process.exit(1)
}
process.stdin.setRawMode(false)
resolve()
}))
}
このスニペットは、プロセスを終了したくない場合に機能します。
console.log('Press any key to continue.');
process.stdin.once('data', function () {
continueDoingStuff();
});
これは非同期なので、ループ内ではそのままでは機能しません-Node 7を使用している場合は、promiseでラップしてasync/await
。
承認されたソリューションは、キーイベントを非同期的に待機してから終了します。これは、「続行するには任意のキーを押す」ためのソリューションではありません。
Nodejsシェルスクリプトの作成中に一時停止する必要がありました。シェルコマンド「read」でchild_processのspawnSyncを使用してしまいました。
これは基本的にスクリプトを一時停止し、Enterキーを押すと続行します。 Windowsのpauseコマンドとよく似ています。
require('child_process').spawnSync("read _ ", {Shell: true, stdio: [0, 1, 2]});
お役に立てれば。
var fs = require("fs")
var fd = fs.openSync("/dev/stdin", "rs")
fs.readSync(fd, new Buffer(1), 0, 1)
fs.closeSync(fd)
この答えは node.js:readSync from stdin? からvadzimから取得されます
これのためのパッケージがあります: press-any-key
そしてここに例があります:
const pressAnyKey = require('press-any-key');
pressAnyKey("Press any key to resolve, or CTRL+C to reject", {
ctrlC: "reject"
})
.then(() => {
console.log('You pressed any key')
})
.catch(() => {
console.log('You pressed CTRL+C')
})
W10では問題なく動作します。
const fs = require('fs');
process.stdin.setRawMode(true);
fs.readSync(0, Buffer.alloc(1), 0, 1);
時間の60%、それは毎回動作します。