如何设置Node以打开n个外壳并同步执行n个命令?

时间:2019-05-17 18:47:53

标签: javascript shell

我正在编写一个需要启动代理的测试套件,然后一旦启用,就需要对代理发出curl POST请求。

这很容易通过终端中的两个不同标签手动进行,例如

In one terminal window: sh ./proxy/bin/yourProxy
In another terminal window: curl -X POST http://localhost:8080/proxy

这可行,但是我想让它自动化。

我遇到的问题是,当我运行第一个shell命令时,一个shell打开,但是另一个shell从不打开-我需要两个不同的shell-每个命令一个。

我尝试使用并发的npm模块,并使用sleep使命令同步-不走运

我正在探索使用节点。我已经尝试过节点的生成,执行和execSync。这是使用spawn的示例:

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

const childOne = spawn("/bin/sh", [ "-c", "curl http://www.google.com" ])
const childTwo = spawn("/bin/sh", [ "-c", "curl http://www.yahoo.com" ])

childOne.stdout.on("data", (data) => {
  console.log(`childOne stdout:\n${data}`);
});

childTwo.stdout.on("data", (data) => {
  console.log(`childTwo stdout:\n${data}`);
});

这会产生卷曲childOne的结果-但是child2显示“重定向”。

端子输出

child2 stdout:
redirect
child stdout:
expected output from curling google.com

如何设置Node以打开n个外壳并同步执行n个命令

1 个答案:

答案 0 :(得分:0)

首先,您不需要同步运行其他进程,发出网络请求等操作,因为它们可能会阻塞您的主进程并使您的程序卡住。

第二,您发现的功能没有问题:spawn()exec()可以异步运行进程,而execSync()可以同步执行相同的操作。 curl http://www.yahoo.com打印redirect的原因是它是重定向。尝试在您自己的shell中运行它,您将能够找到完全相同的输出:

$ curl http://www.yahoo.com
redirect