【问题标题】:Pipe a transform or readable stream to process.stdout将转换或可读流通过管道传输到 process.stdout
【发布时间】:2023-03-24 21:17:01
【问题描述】:

我有以下代码:

const pt = require('prepend-transform').default;
const writable = pt('[test-process]').pipe(process.stdout);

writable 是目标流,它是 process.stdout,所以如果我写入可写,我只会得到标准输出,而不会在每一行前面加上 '[test-process]'。请注意,pt(x) 返回一个转换流。

另一方面,如果我这样做:

const pt = require('prepend-transform').default;
const transform = pt('[test-process]');
transform.pipe(process.stdout);

然后我写入转换流,似乎没有数据进入 process.stdout。

所以我需要使用读取流而不是转换流来执行此操作吗?

所以我尝试使用可读流而不是转换流:

  const data = [];
  const readable = new stream.Readable({
    read: function (size) {
     this.push(data.pop());
    }
  });

 readable.pipe(pt('[test-process]')).pipe(process.stdout);


 let log = function(){
     Array.from(arguments).forEach(function(a){
        data.push(a);
     });
  };

当我像这样使用可读时,什么都不会写入标准输出。

【问题讨论】:

  • 在我尝试了prepend-transformexample usage 但没有成功后,我决定将ol' poke 与console.log() 一起使用,并找到了一种使用方法:P 希望你能在我的答案中推断出工作代码。

标签: node.js stream


【解决方案1】:

'prepend-transform' 与可读流结合使用


如果你这样做:

const PT =  require('prepend-transform')
console.log(PT)

你得到:

{ default: [Function: default_1] }

所以,你必须这样做PT.default('[test-process]')

这是一个工作代码示例(带有可读流):

//:Example Readable Stream
var Readable = require('stream').Readable;
var rs = new Readable;
rs.push('beep ');
rs.push('boop\n');
rs.push(null);
//:PrependTransform Correct Usage Example
const PT =  require('prepend-transform');
rs.pipe(PT.default('[child stdout]')).pipe(process.stdout);

示例输出:

[child stdout]beep boop

额外:Node.js : Stream Handbook

【讨论】:

    猜你喜欢
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2014-01-02
    相关资源
    最近更新 更多