我试图在Electron中使用AngularJS使用spawn运行命令,但出现错误。
events.js:183 Uncaught Error: spawn dita ENOENT
at _errnoException (util.js:1024)
at Process.ChildProcess._handle.onexit (internal/child_process.js:190)
at onErrorNT (internal/child_process.js:372)
at _combinedTickCallback (internal/process/next_tick.js:138)
at process._tickCallback (internal/process/next_tick.js:180)
_errnoException @ util.js:1024
ChildProcess._handle.onexit @ internal/child_process.js:190
onErrorNT @ internal/child_process.js:372
_combinedTickCallback @ internal/process/next_tick.js:138
_tickCallback @ internal/process/next_tick.js:180
这是我的 spawn命令:-
spawn('dita',
['--input=C:\Users\aaa\Desktop\ditamaps\mobile-phone\mobilePhone.ditamap', '--output=C:\Users\aaa\Desktop', '--format=pdf'],
{
cwd: $scope.ditaPath + "\\bin"
}, function(error, stdout, stderr) {
// work with result
console.log(stdout);
console.log(stderr);
console.log(error);
});
当我手动运行相同的批处理代码时,它工作正常。 这是什么错误?我无法得到这个。
答案 0 :(得分:1)
使用spawn创建进程与在命令提示符下运行该进程不同,您可以传递可执行文件的绝对路径,例如,
spawn('/full/path/to/dita',
['--input=C:\Users\aaa\Desktop\ditamaps\mobile-phone\mobilePhone.ditamap', '--output=C:\Users\aaa\Desktop', '--format=pdf'],
{
cwd: $scope.ditaPath + "\\bin"
}, function (error, stdout, stderr) {
// work with result
console.log(stdout);
console.log(stderr);
console.log(error);
}
);
或者如果您想模拟命令提示符
spawn('cmd.exe',
['dita', '--input=C:\Users\aaa\Desktop\ditamaps\mobile-phone\mobilePhone.ditamap', '--output=C:\Users\aaa\Desktop', '--format=pdf'],
{
cwd: $scope.ditaPath + "\\bin"
}, function (error, stdout, stderr) {
// work with result
console.log(stdout);
console.log(stderr);
console.log(error);
}
);
这两种解决方案都应该起作用,但是在您的情况下,我想第二种可能很容易实现。