节点 child_process 分叉时传递 argv
Node child_process pass argv when forked
我有带有 Express 服务器的 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
节点 8.9.4
快递 4.15.5
execArgv
选项用于为执行过程传递参数,而不是为您的脚本传递参数。
这对于将特定的执行环境传递给您的分叉进程可能很有用。
如果你想给你的脚本传递参数,你应该使用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
我有带有 Express 服务器的 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
节点 8.9.4
快递 4.15.5
execArgv
选项用于为执行过程传递参数,而不是为您的脚本传递参数。
这对于将特定的执行环境传递给您的分叉进程可能很有用。
如果你想给你的脚本传递参数,你应该使用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