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 的代码达到跟命令行一样的效果吗?
加上{shell:true}参数试试
--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
文件,并传递了两个参数 arg1
和 arg2
。子进程通过 process.argv
接收这些参数。同时,我们监听了子进程的标准输出和标准错误输出,并在子进程退出时获取其退出码。
希望这个示例能帮助你理解如何在 Node.js 中使用 child_process.spawn
传递参数。