Команда spawn не работает в электронном приложении

Я пытаюсь запустить команду, используя spawn, используя AngularJS в Electron, я получаю сообщение об ошибке.

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('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);
            });

Когда я запускаю тот же пакетный код вручную, он работает нормально. Что это за ошибка? Я не могу получить это.


person WhoAmI    schedule 27.09.2018    source источник
comment
Что вы имели в виду под запуском вручную?   -  person Janith    schedule 27.09.2018
comment
@JanithKasun означает запуск команды в командной строке. т.е.; dita --input=C:\Users\aaa\Desktop\ditamaps\mobile-phone\mobilePhone.ditamap --output=C:\Users\aaa\Desktop --format=pdf   -  person WhoAmI    schedule 27.09.2018


Ответы (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);
    }
);

оба решения должны работать, но в вашем сценарии, я думаю, второе может быть легко реализовано.

person Janith    schedule 27.09.2018
comment
Это работает . Хотя cmd.exe выдавало ошибку, не знаю почему, но когда я изменил это на dita.bat, который был в каталоге, это сработало. Спасибо за вашу помощь. - person WhoAmI; 01.10.2018