如何从Node.js派生两个进程并将它们通过管道连接在一起?

exdqitrt  于 2023-01-16  发布在  Node.js
关注(0)|答案(1)|浏览(97)

我希望能够生成两个Node.js子进程,但将其中一个进程的stdout通过管道传输到另一个进程的stdin

curl "https://someurl.com" | jq .

My Node的stdout将转到终端或文件,这取决于用户是否通过管道输出。

vhmi4jdf

vhmi4jdf1#

你可以用Node.js内置的child_process模块生成一个子进程,我们需要进程,所以我们调用它两次:

const cp = require('child_process')
const curl = cp.spawn('curl', ['https://someurl.com'], { stdio: ['inherit', 'pipe', 'inherit'] })
const jq = cp.spawn('jq', ['.'], { stdio: ['pipe', 'inherit', 'pipe'] })

第一个参数是要运行的可执行文件,第二个是传递给它的参数数组,第三个是 * options *,我们需要告诉它进程的stdinstdoutstderr要被路由到哪里:'inherit'表示"使用主机Node.js应用程序的stdio",'pipe'表示"我们将通过编程方式处理它。
所以在这个例子中curl的输出和jq的输入都是通过编程来处理的,我们使用了一行额外的代码:

curl.stdout.pipe(jq.stdin)

这意味着"将curl的标准输出垂直插入jq的标准输入"。
就这么简单。

相关问题