Nodejs – spawn.stdout和process.stdout的区别

玩child_process,我想pipe生成的CP输出到自定义stream。

我不明白为什么在第一种情况下pipe道不工作,并在第二个。

预置

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); 

输出login到terminal,但不pipe它。

工作

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

pipe道输出为writable

该文件说process.stdout只是一个可写的stream,所以你不能从它pipe道。 这很奇怪,它不会抛出一个Error: Cannot pipe. Not readable. Error: Cannot pipe. Not readable. 虽然。 此外, cp.stdout是一个可读的stream,所以它pipe道,因为它应该。