节点的process.stdin可读流日志在可读事件侦听器回调中读取时为空

时间:2014-05-09 16:04:09

标签: javascript node.js stream command-line-interface

不使用data事件,我希望此代码记录每个键的unicode引用,因为我按下它。我无法理解为什么我每次都会Null

每当我按下键盘上的一个键时,我就会在process.stdin上发出一个可读事件,运行一个回调,允许我从这个可读流中读取数据。那么为什么它不能从我的按键中获取任何数据呢?

// nodo.js

function nodo() { 
  var stdin = process.stdin;
  var stdout = process.stdout;

  if (stdin.isTTY) {
    stdin.setRawMode(true);
    stdin.setEncoding('utf8');
    stdin.resume();
    stdout.write('\u000A>Bienvenido\u000A');      
  } else {
    process.exit();
  }

  stdin.on('readable', function(){

    var input = stdin.read();
    console.log(input);

  });
}

nodo();

running the code

感谢您的关注。

1 个答案:

答案 0 :(得分:1)

请阅读that document 这解释了如何正确处理process.stdin。你的错误是使用stdin.resume 在进程stdin流上启用“旧”兼容模式。

// nodo.js

function nodo() { 
    var stdin = process.stdin;
    var stdout = process.stdout;

    if (stdin.isTTY) {
        stdin.setRawMode(true);
        stdin.setEncoding('utf8');
        stdout.write('\u000A>Bienvenido\u000A');      

        process.stdin.setEncoding('utf8');

        process.stdin.on('readable', function() {
            var chunk = process.stdin.read();
            if (chunk !== null) {
                process.stdout.write('data: ' + chunk);
            }
        });

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

nodo();