【问题标题】:Spawn command not working in electron app生成命令在电子应用程序中不起作用
【发布时间】:2019-03-03 08:50:36
【问题描述】:

我正在尝试在 Electron 中使用 spawn 使用 AngularJS 运行命令,但出现错误。

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

当我手动运行相同的批处理代码时,它工作正常。 这是什么错误?我无法得到这个。

【问题讨论】:

  • 手动运行是什么意思?
  • @JanithKasun 表示在命令提示符下运行命令。 IE; dita --input=C:\Users\aaa\Desktop\ditamaps\mobile-phone\mobilePhone.ditamap --output=C:\Users\aaa\Desktop --format=pdf

标签: angularjs node.js electron spawn


【解决方案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);
    }
);

这两种解决方案都应该有效,但在您的情况下,我猜第二个可能很容易实现。

【讨论】:

  • 它正在工作。虽然cmd.exe 抛出错误,但不知道为什么,但是当我将其更改为目录中的dita.bat 时,它起作用了。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2021-02-28
  • 2015-07-11
  • 1970-01-01
  • 2018-12-31
  • 2016-08-20
  • 2019-04-17
相关资源
最近更新 更多