Nodejs child_process.spawn 参数传输的问题

Nodejs child_process.spawn 参数传输的问题

我本地有一个 https 服务,访问网址是 https://127.0.0.1:8080/

然后在命令行中直接敲

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --host-rules="MAP xxx.asdf:443 127.0.0.1:8080" --ignore-certificate-errors --incognito https://xxx.asdf://xxx.asdf

是会打开一个隐身窗口,并且打开 https://xxx.asdf,然后内容是我 https://127.0.0.1:8080/ 的那网站

但是如果换成以下代码

const child_process = require('child_process');

child_process.spawn( /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome, [ --host-rules="MAP xxx.asdf:443 127.0.0.1:8080", --ignore-certificate-errors, --incognito, https://xxx.asdf ] )

然后通过 node 去运行,会打开一个隐身窗口,但是会提示找不到 https://xxx.asdf 的 ip 地址,即无法访问

初步看来是因为 spawn 运行的和直接在命令行里面敲有点不一样,大家知道怎么改 node 的代码达到跟命令行一样的效果吗?


5 回复

加上{shell:true}参数试试


不行,直接是没有反应,浏览器没有打开命令行就完成了。google 了几篇文章都是说 window 下双引号的问题,但我的明明是 mac [捂脸]

--host-rules,
MAP xxx.asdf:443 127.0.0.1:8080

呢?

不行,
<br>[ '--incognito',<br> '--host-rules="MAP',<br> 'xxx.asdf:443',<br> '127.0.0.1:8080"',<br> '--ignore-certificate-errors',<br> 'https://xxx.asdf' ]<br>
这样也不行

在 Node.js 中,child_process.spawn 用于创建新的子进程,并与其进行交互。传递参数给子进程时,通常是通过 spawn 方法的 args 数组来实现的。此外,你还可以通过 stdio 选项来设置标准输入输出流,以便在父进程和子进程之间传递数据。

以下是一个简单的示例,展示了如何使用 child_process.spawn 来传递参数并捕获子进程的输出:

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

// 创建一个子进程,传递参数
const child = spawn('node', ['child.js', 'arg1', 'arg2'], {
  stdio: ['pipe', 'pipe', 'pipe'] // 设置标准输入输出流
});

// 监听子进程的输出
child.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

child.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

// 关闭事件
child.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

// 在 child.js 文件中,你可以通过 process.argv 接收参数
// 例如:
// console.log(process.argv.slice(2)); // 输出: ['arg1', 'arg2']

在这个示例中,我们创建了一个子进程来运行 child.js 文件,并传递了两个参数 arg1arg2。子进程通过 process.argv 接收这些参数。同时,我们监听了子进程的标准输出和标准错误输出,并在子进程退出时获取其退出码。

希望这个示例能帮助你理解如何在 Node.js 中使用 child_process.spawn 传递参数。

回到顶部