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

时间:2018-09-27 13:11:42

标签: javascript node.js child-process

我正在使用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。似乎该参数未发送到后续脚本。如果不将参数传递给第二个脚本,它将按预期运行。

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

2 个答案:

答案 0 :(得分:1)

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

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