24

次のコードでは

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

ctrl+D を使用して 'end' イベントをトリガーすることはできず、ctrl+C はトリガーせずに終了します。

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

5 に答える 5

16

私はこれを変更します:

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

これに:

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

その他のリソース:プロセス ドキュメント

于 2013-05-06T17:29:52.790 に答える
11

私もこの問題に遭遇し、ここで答えを見つけました: Github issue

Windows 自体が提供する readline インターフェイス (たとえば、現在使用しているもの) は ^D をサポートしていません。より unix-y な動作が必要な場合は、readline 組み込みモジュールを使用し、stdin を raw モードに設定します。これにより、ノードは生のキープレスを解釈し、^D が機能します。http://nodejs.org/api/readline.htmlを参照してください。

Windows を使用している場合、readline インターフェイスはデフォルトで ^D をサポートしていません。リンクされた指示に従ってそれを変更する必要があります。

于 2015-09-10T06:21:06.920 に答える