使用终端将信息输入到Javascript中

时间:2015-03-10 01:31:58

标签: javascript node.js terminal

我想获取c ++程序的输出并将其输入到javascript文件的stdin中。但是我无法使用方法将任何东西推入标准输入...

node example.js < test.txt

因为我收到以下错误。

  

example.js:35

     

stdin.setRawMode(true);

     

TypeError:undefined不是函数

     

at Object。 (example.js:35:7)

     

在Module._compile(module.js:460:26)

     

at Object.Module._extensions..js(module.js:478:10)

     

在Module.load(module.js:355:32)

     

在Function.Module._load(module.js:310:12)

     

在Function.Module.runMain(module.js:501:10)

     

启动时(node.js:129:16)

     

at node.js:814:3

违规代码如下所示。它在正常输入期间工作正常,但在上述情况下崩溃。

var stdin = process.stdin;
stdin.setRawMode( true );
stdin.resume();
stdin.setEncoding( 'utf8' );
stdin.on( 'data', function( key ){
//do stuff based upon input

是否有人遇到此问题,或有任何关于如何修复它的想法?或另一种解决这个问题的方法?

2 个答案:

答案 0 :(得分:2)

使用重定向的stdin运行程序时,您已连接到ReadStream而不是TTY,因此不支持TTY.setRawMode()。

setRawMode()用于设置tty流,以便它不以任何方式处理其数据,例如提供对换行的特殊处理。这种处理过的数据被称为&#34; cooked&#34;。

标准节点ReadStreams,根据定义,已经是&#34; raw&#34;因为没有特殊的数据处理。

因此,在不调用setRawMode()的情况下重构代码,它应该可以正常工作。

答案 1 :(得分:0)

这是我在Node中处理来自STDIN的数据的方法:

function readStream(stream, callback) {
  var data = '';
  stream.setEncoding('utf-8');
  stream.on('data', onData);
  stream.on('end', onEnd);

  function onData(chunk) {
    data += chunk;
  }

  function onEnd() {
    stream.removeListener('end', onEnd);
    stream.removeListener('data', onData);
    callback(data);
  }
}

问题中的错误消息(“未定义不是函数”)错误意味着您尝试在stdin上调用不存在的方法。在对文档进行粗略扫描时,我找不到setRawMode的提及。也许您使用的是过时的API?我记得不得不取消暂停STDIN(旧式流)。