我正在使用child_process.fork()
在脚本内运行脚本。我在主脚本中使用了变量(另一个应用程序的实例),我需要将此变量作为参数传递给后续脚本,以便在那里进行更新。我尝试了以下方式
子脚本
console.log(process.data);
let a = process.data;
.....................
主脚本
function runScript(scriptPath, data, callback) {
var invoked = false;
var process = childProcess.fork(scriptPath, data);
process.on('error', function (err) {
if (invoked) return;
invoked = true;
callback(err);
});
process.on('exit', function (code) {
if (invoked) return;
invoked = true;
var err = code === 0 ? null : new Error('exit code ' + code);
callback(err);
});
}
let dataValues = "this from the main script";
runScript('./subscript.js' ,dataValues, function (err) {
if (err) throw err;
console.log('finished running some-script.js');
});
当我尝试从后续脚本访问参数时,我得到undefined
。似乎该参数未发送到后续脚本。如果不将参数传递给第二个脚本,它将按预期运行。
我的数据发送到后续脚本的方式有什么问题?
答案 0 :(得分:1)
.fork(...)
期望的是string[]
,而不是string
(docs),因此请尝试将参数作为数组传递:
let dataValues = ["this from the main script"];
此外,在子进程中,您将在process.argv
array中而不是process.data
中接收参数。在子进程脚本中尝试以下操作:
console.log(process.argv);
答案 1 :(得分:0)
您可以将args作为命令行参数发送到第二个脚本,例如
foreach ($reader as $row) {
print_r($row);
}
,然后在您的脚本(scriptPath)上,可以通过process.argv
访问它们if (!ini_get('auto_detect_line_endings')) {
ini_set('auto_detect_line_endings', '1');
}
//输出将为
childProcess.fork(scriptPath+" "+data); //data can be a1 a2 a3