2013-05-06 10 views
6

W poniższym kodzieNie można wywołać zdarzenie „end” CTRL D podczas odczytu ze standardowego wejścia

process.stdin.resume(); 
process.stdin.setEncoding('utf8'); 

process.stdin.on('data', function(chunk) { 
    process.stdout.write('data: ' + chunk); 
}); 

process.stdin.on('end', function() { 
    process.stdout.write('end'); 
}); 

nie mogę wyzwolić zdarzenie „end” za pomocą Ctrl + D, a Ctrl + C tylko wyjście bez wyzwalania to.

hello 
data: hello 
data 
data: data 
foo 
data: foo 
^F 
data: ♠ 
^N 
data: ♫ 
^D 
data: ♦ 
^D^D 
data: ♦♦ 

Odpowiedz

3

Chciałbym to zmienić:

process.stdin.on('end', function() { 
    process.stdout.write('end'); 
}); 

do tego:

process.on('SIGINT', function(){ 
    process.stdout.write('\n end \n'); 
    process.exit(); 
}); 

podobne zasoby: process docs

+0

ale dlaczego? ... otrzymuję ten kod z witryny node.js. Czy to jest nieprawidłowe? – Misaki

+0

Jakiej wersji Node.js używasz? – thtsigma

+0

Używam 0.10.4 – Misaki

4

ja też przyszedł na ten problem i znaleźć odpowiedź tutaj: Github issue

Interfejs readline dostarczany przez same okna (np. ten, którego teraz używasz) nie obsługuje^D. Jeśli chcesz zachować więcej uniksowych zachowań, skorzystaj z wbudowanego modułu readline i ustaw tryb surowy na stdin. Spowoduje to, że węzeł interpretuje nieprzetworzone naciśnięcia klawiszy i^D będzie działać. Zobacz http://nodejs.org/api/readline.html.

Jeśli jesteś w systemie Windows, interfejs readline domyślnie nie obsługuje^D. Będziesz musiał to zmienić zgodnie z powiązanymi instrukcjami.

Powiązane problemy