Можно ли прослушивать входящие нажатия клавиш в запущенном скрипте nodejs? Если я использую process.openStdin()
и слушаю его 'data'
событие, то ввод буферизируется до следующей новой строки, например:
// stdin_test.js
var stdin = process.openStdin();
stdin.on('data', function(chunk) { console.log("Got chunk: " + chunk); });
Запустив это, я получаю:
$ node stdin_test.js
<-- type '1'
<-- type '2'
<-- hit enter
Got chunk: 12
Я бы хотел увидеть:
$ node stdin_test.js
<-- type '1' (without hitting enter yet)
Got chunk: 1
Я ищу nodejs, эквивалентный, например, getc
в ruby
Это возможно?
Ответы:
Вы можете добиться этого, если переключитесь в необработанный режим:
источник
process.stdin.resume(); process.stdin.on('data', function (chunk) { process.stdout.write('data: ' + chunk); });
setRawMode
чтобы он был нижеopenStdin()
, потому что вы можете установить режим только в том случае, еслиstdin
инициализирован.openStdin()
это устаревший и старый API? (Я выучил узел после 2011 года ...)stdin.on('keypress',function(chunk,key))
был удален в последних версиях. И я почти уверен, чтоopenStdin()
он либо был удален, либо устарел. Теперь вы можете получить доступ к stdin asprocess.stdin
Для тех, кто нашел этот ответ, поскольку эта возможность была лишена
tty
, вот как получить необработанный поток символов из stdin:довольно просто - в основном как документация process.stdin, но с использованием
setRawMode( true )
для получения необработанного потока, который труднее идентифицировать в документации.источник
В узле> = v6.1.0:
См. Https://github.com/nodejs/node/issues/6626
источник
process.stdin.setRawMode is not a function
. Попробую нырнуть чуть глубже позже.Эта версия использует модуль нажатия клавиш и поддерживает node.js версии 0.10, 0.8 и 0.6, а также iojs 2.3. Обязательно беги
npm install --save keypress
.источник
process.stdin.setRawMode()
вместо этого он говорит об использовании, но об ошибках и говорит, что нет метода setRawMode, очень раздражаетprocess.stdin.setRawMode
существует, является функцией и работает правильно. Я также тестировал iojs-2.3.1, и он все еще работает.При тестировании nodejs 0.6.4 ( тест не прошел в версии 0.8.14 ):
если вы запустите его и:
Важный код №1:
Важный код № 2:
источник
источник