Apakah mungkin untuk mendengarkan penekanan tombol yang masuk dalam skrip nodejs yang sedang berjalan? Jika saya menggunakan process.openStdin()
dan mendengarkan 'data'
acaranya maka input akan di-buffer hingga baris baru berikutnya, seperti:
// stdin_test.js
var stdin = process.openStdin();
stdin.on('data', function(chunk) { console.log("Got chunk: " + chunk); });
Menjalankan ini, saya mendapatkan:
$ node stdin_test.js
<-- type '1'
<-- type '2'
<-- hit enter
Got chunk: 12
Yang ingin saya lihat adalah:
$ node stdin_test.js
<-- type '1' (without hitting enter yet)
Got chunk: 1
Saya mencari nodejs yang setara dengan, misalnya, getc
di ruby
Apakah ini mungkin?
Jawaban:
Anda dapat mencapainya dengan cara ini, jika Anda beralih ke mode mentah:
sumber
process.stdin.resume(); process.stdin.on('data', function (chunk) { process.stdout.write('data: ' + chunk); });
setRawMode
ke bawahopenStdin()
, karena Anda hanya dapat mengatur mode jikastdin
diinisialisasi.openStdin()
API lama dan usang? (Saya belajar cara node setelah 2011 ...)stdin.on('keypress',function(chunk,key))
telah dihapus dalam versi terbaru. Dan saya cukup yakinopenStdin()
telah dihapus atau tidak digunakan lagi. Sekarang, Anda dapat mengakses stdin sebagaiprocess.stdin
Bagi mereka yang menemukan jawaban ini karena kemampuan ini dilucuti
tty
, berikut ini cara mendapatkan aliran karakter mentah dari stdin:cukup sederhana - pada dasarnya seperti dokumentasi process.stdin tetapi menggunakan
setRawMode( true )
untuk mendapatkan aliran mentah, yang lebih sulit untuk diidentifikasi dalam dokumentasi.sumber
Dalam node> = v6.1.0:
Lihat https://github.com/nodejs/node/issues/6626
sumber
process.stdin.setRawMode is not a function
. Akan mencoba menyelam lebih dalam nanti.Versi ini menggunakan modul keypress dan mendukung node.js versi 0.10, 0.8 dan 0.6 serta iojs 2.3. Pastikan untuk lari
npm install --save keypress
.sumber
process.stdin.setRawMode()
sebagai gantinya tetapi kesalahan itu dan mengatakan tidak ada metode setRawMode, sangat menggangguprocess.stdin.setRawMode
ada, merupakan fungsi, dan bekerja dengan baik. Saya juga menguji iojs-2.3.1 dan masih berfungsi di sana juga.Dengan nodejs 0.6.4 diuji ( Pengujian gagal di versi 0.8.14 ):
jika Anda menjalankannya dan:
Kode penting # 1:
Kode penting # 2:
sumber
sumber