2016-01-27 7 views
0

Я хочу запустить команду «node main.js Project1» из другого js-файла, поэтому я использовал функцию child_process.exec (command [, options] [, callback]). Это сработало успешно. Теперь я хочу запускать две команды «node main.js Project1» и «node main.js Project2» один за другим, используя эту функцию. Я пробовал следующий код, но только первая команда runs.Please кто-то поможет мне в этомВыполнение команд cmd из программы node.js

for(var i=0;i<2;i++) 
{ 
    if(i==0) 
    { 
     var exec = require('child_process').exec, 
     child; 

     child = exec('node main.js Project1', 
     function (error, stdout, stderr) { 

     console.log('stdout: ' + stdout); 
     //console.log('stderr: ' + stderr); 
      if (error !== null) { 
      console.log('exec error: ' + error); 
      } 
      }); 
     } 
     if(i==1) 
     { 
     var exec = require('child_process').exec, 
     child; 
     child = exec('node main.js Project2', 
     function (error, stdout, stderr) { 
     console.log('stdout: ' + stdout); 
     //console.log('stderr: ' + stderr); 
     if (error !== null) { 
     console.log('exec error: ' + error); 
     }); 
    } 
} 

ответ

0

у вас есть два варианта ...

первый вариант заключается в использовании НПМ командиру модуль НПМ я командир

https://www.npmjs.com/package/commander

другой выбор, чтобы продолжить свой нынешний подход.

ВНИМАНИЕ, ЧТО ...

JavaScript не имеет блок сферы. Переменные, введенные внутри блока, привязаны к содержащейся функции или сценарию

Таким образом, объявив var exec дважды, вы переопределяете переменную.

также вы не используете EXEC обратного вызова ...

это сделать ...

var exec = require('child_process').exec, 
    child; 

// THE FUNCTION DEFINED HERE IS YOUR CALLBACK FUNCTION AND WILL BE EXECUTED AFTER YOU RUN THE COMMAND - THUS YOU WANT TO RUN THE SECOND COMMAND INSIDE THE CALLBACK 
    child = exec('node main.js Project1', 
    function (error, stdout, stderr) { 

    console.log('stdout: ' + stdout); 
    //console.log('stderr: ' + stderr); 
     if (error !== null) { 
     console.log('exec error: ' + error); 



    var exec2 = require('child_process').exec, 
    child; 
    child = exec2('node main.js Project2', 
    function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    //console.log('stderr: ' + stderr); 
    if (error !== null) { 
    console.log('exec error: ' + error); 
    }); 



     } 
     }); 
0

Почему вы используете петлю и сослагательное наклонение? Не усложняйте:

const path = require('path'); 
const exec = require('child_process').exec; 

// it's better to build an absolute path to your script 
var scriptPath = path.normalize(__dirname + '/main.js'); 

// the callback is the same, write it once 
var fn = function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    //console.log('stderr: ' + stderr); 
    if (error !== null) { 
     console.log('exec error: ' + error); 
    } 
}; 

var child1 = exec('node ' + scriptPath + ' Project1', fn); 
var child2 = exec('node ' + scriptPath + ' Project2', fn); 

Существует fork() функции для запуска узла сценариев непосредственно. Сценарии, запускаемые таким образом, будут использовать выходной сигнал родителя, поэтому не требуется обратного вызова:

const path = require('path'); 
const child_process = require('child_process'); 

var scriptPath = path.normalize(__dirname + '/test.js'); 

var child1 = child_process.fork(scriptPath, ['Project1']); 
var child2 = child_process.fork(scriptPath, ['Project2']); 
Смежные вопросы