Est-il possible d'écouter les frappes entrantes dans un script nodejs en cours d'exécution? Si j'utilise process.openStdin()
et écoute son 'data'
événement, l'entrée est mise en mémoire tampon jusqu'à la prochaine nouvelle ligne, comme ceci:
// stdin_test.js
var stdin = process.openStdin();
stdin.on('data', function(chunk) { console.log("Got chunk: " + chunk); });
En exécutant ceci, j'obtiens:
$ node stdin_test.js
<-- type '1'
<-- type '2'
<-- hit enter
Got chunk: 12
Ce que j'aimerais, c'est voir:
$ node stdin_test.js
<-- type '1' (without hitting enter yet)
Got chunk: 1
Je recherche un nodejs équivalent, par exemple, getc
en ruby
Est-ce possible?
Réponses:
Vous pouvez y parvenir de cette façon, si vous passez en mode brut:
la source
process.stdin.resume(); process.stdin.on('data', function (chunk) { process.stdout.write('data: ' + chunk); });
setRawMode
pour qu'il se trouve sous leopenStdin()
, car vous ne pouvez définir le mode que si lestdin
est initialisé.openStdin()
une API obsolète et ancienne? (J'ai appris le nœud bien après 2011 ...)stdin.on('keypress',function(chunk,key))
a été supprimé dans les versions récentes. Et je suis presque sûr qu'ilopenStdin()
a été supprimé ou est obsolète. Maintenant, vous pouvez accéder à stdin asprocess.stdin
Pour ceux qui trouvent cette réponse puisque cette capacité a été supprimée
tty
, voici comment obtenir un flux de caractères bruts à partir de stdin:assez simple - essentiellement comme la documentation de process.stdin mais en utilisant
setRawMode( true )
pour obtenir un flux brut, ce qui est plus difficile à identifier dans la documentation.la source
Dans node> = v6.1.0:
Voir https://github.com/nodejs/node/issues/6626
la source
process.stdin.setRawMode is not a function
. J'essaierai de plonger un peu plus loin plus tard.Cette version utilise le module keypress et prend en charge les versions 0.10, 0.8 et 0.6 de node.js ainsi que iojs 2.3. Assurez-vous de courir
npm install --save keypress
.la source
process.stdin.setRawMode()
place mais que des erreurs et ne dit aucune méthode setRawMode, très ennuyeuxprocess.stdin.setRawMode
existe, est une fonction et fonctionne correctement. J'ai également testé sur iojs-2.3.1 et cela fonctionne toujours là aussi.Avec nodejs 0.6.4 testé ( échec du test dans la version 0.8.14 ):
si vous l'exécutez et:
Code important n ° 1:
Code important n ° 2:
la source
la source