gpt4 book ai didi

node.js - Node child_process 在 fork 时传递 argv

转载 作者:搜寻专家 更新时间:2023-11-01 00:28:30 26 4
gpt4 key购买 nike

我有带有 Express 服务器的 Node 应用程序。我在服务器文件夹中也有 Node 脚本。在某些事件中,我需要从单独的 Node 脚本获取数据,因此我创建了子进程。

没有参数,一切正常,但我需要从父进程传递一些数据。

var express = require('express');
var router = express.Router();
var child_process = require('child_process');

router.get('/:site/start', function(req, res, next) {
const basedir = req.app.get('basedir');
const child_script_path = basedir + '/scripts/script.js';
const child_argv = [
'--slowmo=0',
'--headless=1'
];

child = child_process.fork(child_script_path, {
execArgv: child_argv
});

...
}
});

当我尝试通过 Express 传递参数和运行脚本时,显示了这些错误:

/home/user/.nvm/versions/node/v8.9.4/bin/node: bad option: --slowmo=0
/home/user/.nvm/versions/node/v8.9.4/bin/node: bad option: --headless=1

但是当我从命令行运行脚本时:

node /scripts/script.js --slowmo=0 --headless=1

我没有收到任何错误,脚本可以从命令行捕获参数。

在这种情况下如何将参数传递给子脚本?

Ubuntu 16.04
Node 8.9.4
express 4.15.5

最佳答案

execArgv 选项用于为执行过程传递参数,而不是为您的脚本传递参数。
这对于将特定的执行环境传递给您的 fork 进程可能很有用。

如果你想给你的脚本传递参数,你应该使用args
child_process.fork(modulePath[, args][, options])

例子:

const child_process = require('child_process');

const child_script_path = './script.js';
const child_argv = [
'--foo',
'--bar'
]
const child_execArgv = [
'--use-strict'
]

let child = child_process.fork(child_script_path, child_argv, {
execArgv: child_execArgv // script.js will be executed in strict mode
})

// script.js
console.log(process.argv[2], process.argv[3]) // --foo --bar

关于node.js - Node child_process 在 fork 时传递 argv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48285922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com