传递给子进程的参数未定义

Passed argument to the child process is undefined

我是 运行 使用 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。似乎参数没有发送到后续脚本。如果我不将参数传递给第二个脚本,它就是预期的 运行。

我的数据发送到后续脚本的方式有什么问题?

您可以将 args 作为命令行参数发送到您的第二个脚本,例如

childProcess.fork(scriptPath+" "+data); //data can be a1 a2 a3 

然后在您的脚本 (scriptPath) 上,您可以通过 process.argv

访问它们
for (let j = 0; j < process.argv.length; j++) {  
    console.log(j + ' -> ' + (process.argv[j])); 
}

// 输出将是

0 -> a1
1 -> a2
2 -> a3

.fork(...) 期望 string[],而不是 string (docs),因此请尝试将参数作为数组传递:

let dataValues = ["this from the main script"];

此外,在子进程中,您将收到 process.argv array 中的参数,而不是 process.data。在子进程脚本中试试这个:

console.log(process.argv);