我正在为编辑器 Atom 开发一个包。该软件包包含一个仅具有 CLI 的 Python 程序 GUI。通过使用我的包,用户只需单击一个图标。功能在Windows下测试良好,运行良好。现在我正在对 OS X 进行所有测试,但麻烦开始了。
在测试过程中,我发现了一些错误,通过检查操作系统并附加参数修复了这些错误。
我正在使用 child_process 和 exec 或 execSync。
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 下我没有遇到问题。
现在有关错误对象的更多信息:
- error.message = 命令失败:python_command /Users/jDoe/Document/test/test.md
- 错误代码 = 119
- 错误.killed = false
错误.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/