Переданный аргумент в дочерний процесс не определен - PullRequest
0 голосов
/ 27 сентября 2018

Я запускаю скрипт внутри скрипта, используя 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 голосов
/ 27 сентября 2018

.fork(...) ожидает string[], а не string ( документы ), поэтому попробуйте передать аргументы в виде массива:

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

Также в дочернем элементеВ процессе вы получите аргументы в массиве process.argv , а не process.data.Попробуйте это в сценарии дочернего процесса:

console.log(process.argv);
0 голосов
/ 27 сентября 2018

Вы можете отправлять аргументы в качестве аргументов командной строки во второй скрипт, например

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
...