Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从stdin包装readline以在管道中使用?_Javascript_Node.js_Stream - Fatal编程技术网

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。 我该怎么做

谢谢,
Jens

Readline示例(无转换流):

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。如何将其放入管道中?谢谢,我知道这个选项。我想使用管道而不是此构造。