node.js - Nodejs-spawn.stdout 和 process.stdout 之间的区别

标签 node.js child-process

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

将输出传送到可写

最佳答案

医生说 process.stdout 只是一个可写流,因此您无法通过它进行管道传输。奇怪的是它没有抛出 Error: Cannot pipe. Not readable.尽管。另外, cp.stdout 是一个可读流,因此它按应有的方式进行管道传输。

关于node.js - Nodejs-spawn.stdout 和 process.stdout 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35011214/

相关文章:

node.js - 尝试在 Node.js 中连接到 Elasticache Redis 时出现 "Invalid protocol"

node.js - 使用 mongoose 和 nodejs 在 mongodb 中保存模型数组

node.js - 以编程方式使用 Node 子进程执行 'npm init',但无法知道它何时完成

javascript - 在 Bunyan 的控制台中显示调试消息

javascript - MySql:字符串变成对象?奇怪的行为

node.js - 如果不存在则创建 S3 存储桶

windows - 多个 npm 安装失败(EPERM 错误)

c - 写入文件描述符

node.js - NodeJS等待在子进程中不起作用

javascript - 子进程 exec cwd,未设置当前工作目录