Node.js - 子进程抛出错误,但在 OS X 下可以在终端中执行命令

标签 node.js macos package atom-editor child-process

我正在为编辑器 Atom 开发一个包。该软件包包含一个仅具有 CLI 的 Python 程序 GUI。通过使用我的包,用户只需单击一个图标。功能在Windows下测试良好,运行良好。现在我正在对 OS X 进行所有测试,但麻烦开始了。

在测试过程中,我发现了一些错误,通过检查操作系统并附加参数修复了这些错误。

我正在使用 child_process 和 execexecSync

console.log("cmd "+cmd);  //just for whether cmd is correct
child_process.exec(cmd, (error, stdout, stderr) => {
    if (error) {
        //error handling
        console.log("error.msg "+error.message;
    }else{
     console.log("stdout " +stdout); //just for testing
     console.log("stderr " +stderr); //just for testing
    }
}

我的问题是命令执行正确 - python 程序生成文件但进程抛出错误。 我还在终端中测试了该命令,没有出现错误。在 Windows 下我没有遇到问题。

现在有关错误对象的更多信息:

  1. error.message = 命令失败:python_command /Users/jDoe/Document/test/test.md
  2. 错误代码 = 119
  3. 错误.killed = false
  4. 错误.stack

    Error: 
        Command failed: python_command /Users/jDoe/Document/test/test.md
          at ChildProcess.exithandler (child_process.js:223:12)
          at emitTwo (events.js:106:13)
          at ChildProcess.emit (events.js:191:7)
          at maybeClose (internal/child_process.js:885:16)
          at Process.ChildProcess._handle.onexit   
        (internal/child_process.js:226:5)"
    

python 程序无法读取语言环境并返回该值为 None,但我需要编码。

有什么想法吗?

最佳答案

我读取区域设置并将它们传递给进程。

var env = Object.create( process.env );
env.LANG=`en_US.UTF-8`;  // just for testing 
iExec(cmd, {env: env, cwd: path},
(error, stdout, stderr)  => { 
  if(error){
   // do error handling
  }
});

现在一切正常。

关于Node.js - 子进程抛出错误,但在 OS X 下可以在终端中执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861844/

相关文章:

android - 什么是错误包 androidx 和 Android JUnit 4?

node.js - Firebase - TypeError : admin. auth(...).createUserWithEmailAndPassword 不是函数

node.js - 在 Express js 中引导后获取连接

macos - OS X bash For 循环只处理目录中的一个文件

macos - 如何将地址字符串转换为地址字典

c - 如何在 OS X 上编译 OpenMP 和 MPI 混合 C 程序

数据点的随机曲线分布

Java包执行

node.js - Gulp、Wiredep 和 Bower 依赖项

node.js - 为什么这个 AWS lambda 会导致错误 : WARNING: Callback/response already delivered