使用终端将信息输入Javascript 我想把C++程序的输出输入到JavaScript文件的STDIN中。但是,我一直无法使用该方法将任何内容推入stdin node example.js < test.txt
有没有人遇到过这个问题,或者有没有关于如何修复它的想法?还是解决此问题的另一种方法?这是我如何在节点中处理来自STDIN的数据:使用终端将信息输入Javascript 我想把C++程序的输出输入到JavaScript文件的STDIN中。但是,我一直无法使用该方法将任何内容推入stdin node example.js < test.txt,javascript,node.js,terminal,Javascript,Node.js,Terminal,有没有人遇到过这个问题,或者有没有关于如何修复它的想法?还是解决此问题的另一种方法?这是我如何在节点中处理来自STDIN的数据: function readStream(stream, callback) { var data = ''; stream.setEncoding('utf-8'); stream.on('data', onData); stream.on('end', onEnd); function onData(chunk) { data += c
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);
}
}
问题中的错误消息(“undefined is not a function”)错误表示您试图调用
stdin
上不存在的方法。在对文档的粗略扫描中,我找不到任何关于setRawMode
的内容。也许您使用的是过时的API?我记得必须取消暂停STDIN(旧式流)已被弃用。使用重定向的STDIN运行程序时,您连接的是ReadStream,而不是TTY,因此不支持TTY.setRawMode()
setRawMode()用于设置tty流,以便它不会以任何方式处理其数据,例如提供换行的特殊处理。这种经过处理的数据被称为“煮熟”
根据定义,标准节点读流已经是“原始”的,因为并没有对数据进行特殊处理
因此,在不调用setRawMode()的情况下重构您的代码,它应该可以正常工作。您使用的是什么平台/操作系统?osx 10.10虽然我也希望它可以在raspberry Pia上工作,但请忽略它。我在重定向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);
}
}