2016-01-28 2 views
1

Я не могу выполнить команду оболочки с помощью child_process from node.js https://nodejs.org/api/child_process.html, я делаю электронную программу с использованием React JS.Complexe child_process не работает с bluebird Promise

Я хочу выполнить обещание с bluebird, моя функция работает, но только для небольшой команды, такой как ls, но если я хочу выполнить простую программу hello world в папке, я хочу сделать что-то вроде: cd localbuild/login/ && java Main. Он работает на моем терминале. Когда я попытался сделать это в своей функции, у меня есть эта ошибка: promise rejected: Error: spawn cd localbuild/login/ ENOENT closing code: -2.

Вот моя функция:

_compile(command){ 

    var Promise = require('bluebird'); 
    var exec = require('child_process').execFile; 

    var pathFile = "cd localbuild/login/"; 

    function promiseFromChildProcess(child) { 
     return new Promise(function (resolve, reject) { 
     child.addListener("error", reject); 
     child.addListener("exit", resolve); 
     }); 
    } 
    var child = exec(pathFile+ " && "+command); 

    //var child = exec('ls'); // It works 

    promiseFromChildProcess(child).then(function (result) { 
     console.log('promise complete: ' + result); 
    }, function (err) { 
     console.log('promise rejected: ' + err); 
    }); 

    child.stdout.on('data', function (data) { 
     console.log('stdout: ' + data); 
    }); 
    child.stderr.on('data', function (data) { 
     console.log('stdout: ' + data); 
    }); 
    child.on('close', function (code) { 
     console.log('closing code: ' + code); 
    }); 
} 

Можете ли вы помочь мне, пожалуйста?

ответ

1

Функция библиотеки child_process, которую вы импортируете, является execFile, но вы используете ее для запуска команды оболочки, а не для запуска исполняемого файла.

Просто измените:

var exec = require('child_process').execFile; 

To:

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

И он должен работать!

+0

Большое спасибо – fandro

Смежные вопросы