【问题标题】:Nodejs - difference between spawn.stdout and process.stdoutNodejs - spawn.stdout 和 process.stdout 之间的区别
【发布时间】:2016-01-26 10:02:20
【问题描述】:

玩弄 child_process,我想将生成的 cp 输出通过管道传输到自定义流。

我不明白为什么在第一种情况下管道不起作用,而在第二种情况下。

预设

const cp = require('child_process');
const process = require('process');
const stream = require('stream');

var writable = new stream.Writable();
writable._write = function (data) {
    console.log(data.toString());
};    

不起作用

var spawnedProcess = cp.spawn('ls', [], {
    stdio: [process.stdin, process.stdout, process.stderr] 
});
process.stdout.pipe(writable);

输出登录到终端,但不通过管道输出。

有效

var spawnedProcess = cp.spawn('ls', [], {});
spawnedProcess.stdout.pipe(writable);

管道输出到writable

【问题讨论】:

    标签: node.js child-process


    【解决方案1】:

    文档说process.stdout 只是一个可写流,因此您无法从中进行管道传输。奇怪的是它没有抛出Error: Cannot pipe. Not readable.。此外,cp.stdout 是一个可读流,因此它应该按照它的方式进行管道传输。

    【讨论】:

    • 明白。有点跑题了,如果我想将自定义标准输出用于生成,那么它应该是可读的流吗?我将随时与您分享我的相关问题stackoverflow.com/questions/34967278/…
    • @MrBr 不,当您通过管道传输到流时,该目标流必须是可写的:readable.pipe(writable);。我回答了你的另一个问题:)
    猜你喜欢
    • 2013-11-29
    • 2017-10-17
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2021-12-30
    • 2016-02-06
    相关资源
    最近更新 更多