Javascript 如何从stdin包装readline以在管道中使用?
我正在编写一个脚本来处理控制台中程序的输出。这个程序会产生大量的结果,我想动态地过滤它们,以便只保留我需要的东西 以下是我到目前为止的情况:Javascript 如何从stdin包装readline以在管道中使用?,javascript,node.js,stream,Javascript,Node.js,Stream,我正在编写一个脚本来处理控制台中程序的输出。这个程序会产生大量的结果,我想动态地过滤它们,以便只保留我需要的东西 以下是我到目前为止的情况: const {pipeline, Transform} = require('stream'); var readline = require('readline'); class FilterBlastOutput extends Transform { constructor(options) { super(options)
const {pipeline, Transform} = require('stream');
var readline = require('readline');
class FilterBlastOutput extends Transform {
constructor(options) {
super(options);
}
_transform(chunk,encoding,callback) {
if(chunk === '\u0003')
process.exit();
let row = chunk.split("\t");
if(row[3] >= 19 && row[4] <= 1)
callback(null,chunk);
}
}
// Added after suggestion to use readline module
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
pipeline(
process.stdin,
new FilterBlastOutput(),
process.stdout,
err => {
if(err) {
console.log("Pipeline failed: ");
} else {
console.log('Pipeline succeeded.')
}
}
);
const{pipeline,Transform}=require('stream');
var readline=require('readline');
类FilterBlastOutput扩展了转换{
构造函数(选项){
超级(期权);
}
_转换(块、编码、回调){
如果(块=='\u0003')
process.exit();
let row=chunk.split(“\t”);
如果(第[3]行>=19和第[4]行){
如果(错误){
log(“管道失败:”);
}否则{
console.log('管道成功')
}
}
);
在管道(..)中,我使用process.stdin。
我希望得到一个以定义的块(行)提供数据的流,而不是process.stdin。
我该怎么做
谢谢,
JensReadline示例(无转换流):
const readline=require('readline');
const rl=readline.createInterface({
输入:process.stdin
});
rl.on('line',filterBlastOutput)
函数filterBlastOutput(行){
设row=line.split(“\t”);
如果(第[3]>=19和第[4]=19和第[4]行){
如果(错误){
log(“管道失败:”);
}否则{
console.log('管道成功')
}
}
);
如果您想创建一个流来从fille读取数据,请使用'fs.createreadstream'Node.js有一个内置的moduleOK,因此我添加了readline。如何将其放入管道中?谢谢,我知道这个选项。我想使用管道而不是此构造。