Ist es möglich, in einem laufenden NodeJS-Skript auf eingehende Tastenanschläge zu warten? Wenn ich process.openStdin()
sein 'data'
Ereignis verwende und abhöre, wird die Eingabe bis zur nächsten neuen Zeile gepuffert, wie folgt:
// stdin_test.js
var stdin = process.openStdin();
stdin.on('data', function(chunk) { console.log("Got chunk: " + chunk); });
Wenn ich das laufen lasse, bekomme ich:
$ node stdin_test.js
<-- type '1'
<-- type '2'
<-- hit enter
Got chunk: 12
Was ich sehen möchte ist:
$ node stdin_test.js
<-- type '1' (without hitting enter yet)
Got chunk: 1
Ich suche nach einem Knoten, der z. B. getc
in Ruby entspricht
Ist das möglich?
Antworten:
Sie können dies auf diese Weise erreichen, wenn Sie in den Rohmodus wechseln:
quelle
process.stdin.resume(); process.stdin.on('data', function (chunk) { process.stdout.write('data: ' + chunk); });
setRawMode
, um unter das zu seinopenStdin()
, da Sie den Modus nur einstellen können, wenn dasstdin
initialisiert ist.openStdin()
eine veraltete und alte API? (Ich habe Node Way nach 2011 gelernt ...)stdin.on('keypress',function(chunk,key))
wurde in neueren Versionen entfernt. Und ich bin mir ziemlich sicher, dassopenStdin()
entweder entfernt wurde oder veraltet ist. Jetzt können Sie auf stdin asprocess.stdin
Für diejenigen, die diese Antwort finden, da diese Funktion entfernt wurde
tty
, ist hier, wie man einen rohen Zeichenstrom von stdin erhält:ziemlich einfach - im Grunde genau wie die Dokumentation von process.stdin, aber verwendet
setRawMode( true )
, um einen Rohdatenstrom zu erhalten, der in der Dokumentation schwerer zu identifizieren ist.quelle
In Knoten> = v6.1.0:
Siehe https://github.com/nodejs/node/issues/6626
quelle
process.stdin.setRawMode is not a function
. Ich werde später versuchen, etwas tiefer zu tauchen.Diese Version verwendet das Tastendruckmodul und unterstützt node.js Version 0.10, 0.8 und 0.6 sowie iojs 2.3. Stellen Sie sicher, dass Sie rennen
npm install --save keypress
.quelle
process.stdin.setRawMode()
stattdessen verwenden, aber diese Fehler und sagt keine Methode setRawMode, sehr ärgerlichprocess.stdin.setRawMode
existiert, ist eine Funktion und funktioniert richtig. Ich habe auch auf iojs-2.3.1 getestet und es funktioniert auch dort noch.Mit NodeJS 0.6.4 getestet ( Test in Version 0.8.14 fehlgeschlagen ):
wenn Sie es ausführen und:
Wichtiger Code Nr. 1:
Wichtiger Code # 2:
quelle
quelle