2016-01-28 56 views
1

我不想使用node.js中的child_process執行shell命令https://nodejs.org/api/child_process.html,我在做一個使用React JS的電子程序。Complexe child_process不能與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,但您使用它來運行shell命令而不是運行可執行文件。

只要改變:

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

要:

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

,它應該工作!

+0

非常感謝 – fandro