在Electron应用程序中运行python脚本
我有一个Electron项目,它使用NodeJS的child_process模块执行一些python脚本。 我的Python脚本在我的项目的根文件夹。
以下是我如何调用python脚本:
let py = spawn('python',['ResolvePosition.py', obsFilePath, navFilePath]) py.stdout.on('data', data => console.log('data : ', data.toString())) py.on('close', ()=>{ // Python ends, do stuff })
这工作正常,如果我用npm start
我的电子应用npm start
当我使用npm模块electron-builder
为Windows构build一个可执行文件并从dist/win-unpacked/my-app.exe
运行可执行文件,这将无法正常工作似乎我的脚本不能用python ./my-script-py
。
那么,我怎样才能使这个代码适用于build成的项目?
我解决了我的问题。 我会解释可能的未来读者有相同的问题。
使用电子构build器,有一些选项可能不将应用程序源代码打包成电子文件。 这些选项是:
ASAR
是否使用Electron的归档格式将应用程序的源代码打包到档案中。 默认为true。 必须解压缩的节点模块将自动检测到,您不需要明确设置asarUnpack – 如果这不起作用,请提出问题。
或者你可以传递asar选项的对象。
asarUnpack
与app目录相关的glob模式,指定在创buildasar存档时要解压哪些文件。
DOCS
设置为false
解决了这个问题,但不是electron-builder
推荐的。
所以包括我需要解压缩到一个文件夹中的所有文件,并使用"asarUnpack" : "my-folder/*"
是正确的方法。 现在所有解压缩的文件都可以在/resources/app.asar.unpacked/my-folder
另一件需要考虑的事情是使用path'./ResolvePosition.py'
来查看我的电子项目的根文件夹,而不是我的NodeJS文件所在的path,我需要使用:
let python = spawn('python', [path.join(__dirname, '../app.asar.unpacked/my-folder', 'ResolvePosition.py'), obsFilePath, navFilePath])
您可以将脚本包含在extraResources中 :
"build": { "extraResources": "python_scripts", ...
然后,目录将在应用程序根目录:
let python = spawn('python', [path.join(app.getAppPath(), '..', 'python_scripts/my_script.py'])