Complexe child_process 无法与 Promise bluebird 一起使用
Complexe child_process not working with Promise bluebird
我不想使用 child_process 从 node.js https://nodejs.org/api/child_process.html 执行 shell 命令,我正在使用 React JS 做一个电子程序。
我想用 bluebird 做一个 Promise,我的函数可以工作,但只适用于像 '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);
});
}
你能帮帮我吗?
您正在导入的 child_process 库的函数是 execFile,但您将它用于 运行 一个 shell 命令而不是 运行 一个可执行文件。
只需更改:
var exec = require('child_process').execFile;
收件人:
var exec = require('child_process').exec;
它应该有效!
我不想使用 child_process 从 node.js https://nodejs.org/api/child_process.html 执行 shell 命令,我正在使用 React JS 做一个电子程序。
我想用 bluebird 做一个 Promise,我的函数可以工作,但只适用于像 '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);
});
}
你能帮帮我吗?
您正在导入的 child_process 库的函数是 execFile,但您将它用于 运行 一个 shell 命令而不是 运行 一个可执行文件。
只需更改:
var exec = require('child_process').execFile;
收件人:
var exec = require('child_process').exec;
它应该有效!