我正在编写一个需要启动代理的测试套件,然后一旦启用,就需要对代理发出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个命令?
答案 0 :(得分:0)
首先,您不需要同步运行其他进程,发出网络请求等操作,因为它们可能会阻塞您的主进程并使您的程序卡住。
第二,您发现的功能没有问题:spawn()
和exec()
可以异步运行进程,而execSync()
可以同步执行相同的操作。 curl http://www.yahoo.com
打印redirect
的原因是它是重定向。尝试在您自己的shell中运行它,您将能够找到完全相同的输出:
$ curl http://www.yahoo.com
redirect