2013-05-06 2 views
6

Im folgenden CodeKann nicht auslösen ‚Ende‘ Ereignis CTRL D zu verwenden, wenn von stdin

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'); 
}); 

ich kann nicht das ‚Ende‘ Ereignis mit ctrl Lesen auslösen + D und Strg + C nur verlassen, ohne Auslösen es.

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

Antwort

3

Ich würde dies ändern:

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

Um dies:

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

Weitere Informationen: process docs

+0

aber warum? .... ich bekomme diesen Code von der node.js Website. Ist es falsch? – Misaki

+0

Welche Version von Node.js verwenden Sie? – thtsigma

+0

Ich benutze 0.10.4 – Misaki

4

Ich kam auch auf dieses Problem und fand die Antwort hier: Github issue

Die Readline-Schnittstelle, die von Fenstern selbst bereitgestellt wird (z. die, die Sie jetzt verwenden) unterstützt^D nicht. Wenn Sie mehr Unix-y-Verhalten wünschen, verwenden Sie das integrierte Readline-Modul und setzen Sie stdin auf den Rohmodus. Dadurch interpretiert der Knoten rohe Tastenanschläge und^D funktioniert. Siehe http://nodejs.org/api/readline.html.

Wenn Sie unter Windows arbeiten, unterstützt die Readline-Schnittstelle standardmäßig^D nicht. Sie müssen das gemäß den verknüpften Anweisungen ändern.

Verwandte Themen