You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中启动两个进程并实现它们的管道通信?

在Node.js中实现子进程管道传输(等效于curl "https://someurl.com" | jq .)

你可以用Node.js内置的child_process.spawn方法实现这个需求,它适合处理流式的子进程交互,核心思路是把第一个进程的标准输出(stdout)管道传输到第二个进程的标准输入(stdin),再把第二个进程的标准输出接到当前Node.js进程的标准输出上,这样就能自动适配终端显示或被管道到文件的场景。

完整代码示例

const { spawn } = require('child_process');

// 启动curl子进程,请求目标URL
const curlProcess = spawn('curl', ['https://someurl.com']);
// 启动jq子进程,格式化JSON输出
const jqProcess = spawn('jq', ['.']);

// 建立管道:curl的输出传给jq的输入
curlProcess.stdout.pipe(jqProcess.stdin);

// 将jq的输出接到当前进程的stdout,自动适配终端/文件输出
jqProcess.stdout.pipe(process.stdout);

// 处理子进程的错误输出,直接打印到终端
curlProcess.stderr.pipe(process.stderr);
jqProcess.stderr.pipe(process.stderr);

// 监听子进程退出状态,方便排查错误
curlProcess.on('exit', (code) => {
  if (code !== 0) {
    console.error(`curl进程异常退出,退出码:${code}`);
  }
});

jqProcess.on('exit', (code) => {
  if (code !== 0) {
    console.error(`jq进程异常退出,退出码:${code}`);
  }
});

代码说明

  • spawn方法用于启动子进程,第一个参数是命令名,第二个参数是命令的参数数组(避免shell注入风险)
  • 通过pipe方法实现进程间的数据流传输,和bash管道的逻辑完全一致
  • 当前Node.js进程的process.stdout会自动处理输出目标:如果用户直接运行程序,输出到终端;如果用户用node yourscript.js > output.json,输出会写入文件

内容的提问来源于stack exchange,提问作者Glynn Bird

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:16:04