我希望能够生成两个Node.js子进程,但将其中一个进程的stdout通过管道传输到另一个进程的stdin。
stdout
stdin
curl "https://someurl.com" | jq .
My Node的stdout将转到终端或文件,这取决于用户是否通过管道输出。
vhmi4jdf1#
你可以用Node.js内置的child_process模块生成一个子进程,我们需要进程,所以我们调用它两次:
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 *,我们需要告诉它进程的stdin、stdout和stderr要被路由到哪里:'inherit'表示"使用主机Node.js应用程序的stdio",'pipe'表示"我们将通过编程方式处理它。所以在这个例子中curl的输出和jq的输入都是通过编程来处理的,我们使用了一行额外的代码:
stderr
curl.stdout.pipe(jq.stdin)
这意味着"将curl的标准输出垂直插入jq的标准输入"。就这么简单。
1条答案
按热度按时间vhmi4jdf1#
你可以用Node.js内置的
child_process
模块生成一个子进程,我们需要进程,所以我们调用它两次:第一个参数是要运行的可执行文件,第二个是传递给它的参数数组,第三个是 * options *,我们需要告诉它进程的
stdin
、stdout
和stderr
要被路由到哪里:'inherit'表示"使用主机Node.js应用程序的stdio",'pipe'表示"我们将通过编程方式处理它。所以在这个例子中curl的输出和jq的输入都是通过编程来处理的,我们使用了一行额外的代码:
这意味着"将curl的标准输出垂直插入jq的标准输入"。
就这么简单。