Czy można nasłuchiwać nadchodzących naciśnięć klawiszy w działającym skrypcie nodejs? Jeśli używam process.openStdin()
i słucham jego 'data'
zdarzenia, dane wejściowe są buforowane do następnej nowej linii, na przykład:
// stdin_test.js
var stdin = process.openStdin();
stdin.on('data', function(chunk) { console.log("Got chunk: " + chunk); });
Uruchamiając to, otrzymuję:
$ node stdin_test.js
<-- type '1'
<-- type '2'
<-- hit enter
Got chunk: 12
Chciałbym zobaczyć:
$ node stdin_test.js
<-- type '1' (without hitting enter yet)
Got chunk: 1
Szukam odpowiednika nodejs np. getc
W rubinie
czy to możliwe?
Odpowiedzi:
Możesz to osiągnąć w ten sposób, jeśli przełączysz się na tryb surowy:
źródło
process.stdin.resume(); process.stdin.on('data', function (chunk) { process.stdout.write('data: ' + chunk); });
setRawMode
aby znajdował się poniżejopenStdin()
, ponieważ możesz ustawić tryb tylko wtedy, gdystdin
jest zainicjowany.openStdin()
czy interfejs API jest przestarzały i stary? (Nauczyłem się węzła dużo po 2011 ...)stdin.on('keypress',function(chunk,key))
został usunięty w ostatnich wersjach. I jestem prawie pewien,openStdin()
że został usunięty lub jest przestarzały. Teraz możesz uzyskać dostęp do stdin asprocess.stdin
Dla tych, którzy znaleźli tę odpowiedź, ponieważ ta możliwość została pozbawiona
tty
, oto jak uzyskać surowy strumień znaków ze standardowego wejścia:całkiem proste - w zasadzie tak jak w dokumentacji procesu.stdin, ale używa się go
setRawMode( true )
do uzyskania surowego strumienia, który jest trudniejszy do zidentyfikowania w dokumentacji.źródło
W węźle> = v6.1.0:
Zobacz https://github.com/nodejs/node/issues/6626
źródło
process.stdin.setRawMode is not a function
. Spróbuje później zanurkować nieco głębiej.Ta wersja wykorzystuje przyciśnięcie modułu i podpory node.js wersja 0.10, 0.8 i 0.6 jak również iojs 2.3. Pamiętaj, aby biegać
npm install --save keypress
.źródło
process.stdin.setRawMode()
zamiast tego mówi użyj, ale to błędy i mówi, że nie ma metody setRawMode, bardzo denerwująceprocess.stdin.setRawMode
istnieje, jest funkcją i działa prawidłowo. Testowałem również na iojs-2.3.1 i nadal tam działa.Po przetestowaniu nodejs 0.6.4 ( test nie powiódł się w wersji 0.8.14 ):
jeśli go uruchomisz i:
Ważny kod nr 1:
Ważny kod nr 2:
źródło
źródło