我想获取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
是否有人遇到此问题,或有任何关于如何修复它的想法?或另一种解决这个问题的方法?
答案 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(旧式流)。