运行 python Electron 应用程序中的脚本
Run python script in Electron app
我有一个 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
})
如果我 运行 我的 electron 应用程序 npm start
这很好用
当我使用 npm 模块 electron-builder
和 运行 来自 dist/win-unpacked/my-app.exe
的可执行文件为 Windows 构建可执行文件时,这将不起作用,似乎我的脚本无法访问python ./my-script-py
.
那么,我怎样才能让这个代码适用于构建的项目?
我的问题已经解决了。我会为未来可能遇到同样问题的读者解释。
使用 electron builder,有一些选项可以不将应用程序源代码打包到 electron 文件中。
这些选项是:
asar
Whether to package the application’s source code into an archive,
using Electron’s archive format. Defaults to true. Node modules, that
must be unpacked, will be detected automatically, you don’t need to
explicitly set asarUnpack - please file issue if this doesn’t work.
Or you can pass object of asar options.
asarUnpack
A glob patterns relative to the app directory, which specifies which
files to unpack when creating the asar archive.
将 asar
设置为 false
可以解决问题,但 electron-builder
不推荐这样做。
因此,将我需要解压缩的所有文件都包含在一个文件夹中,然后使用
"asarUnpack" : "my-folder/*"
是正确的方法。现在所有解压缩的文件都可以在 /resources/app.asar.unpacked/my-folder
中找到
要考虑的另一件事是,使用路径 './ResolvePosition.py'
将查看我的电子项目的根文件夹,而不是我的 NodeJS 文件所在的路径,我需要使用 :
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'])
我有一个 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
})
如果我 运行 我的 electron 应用程序 npm start
这很好用
当我使用 npm 模块 electron-builder
和 运行 来自 dist/win-unpacked/my-app.exe
的可执行文件为 Windows 构建可执行文件时,这将不起作用,似乎我的脚本无法访问python ./my-script-py
.
那么,我怎样才能让这个代码适用于构建的项目?
我的问题已经解决了。我会为未来可能遇到同样问题的读者解释。
使用 electron builder,有一些选项可以不将应用程序源代码打包到 electron 文件中。 这些选项是:
asar
Whether to package the application’s source code into an archive, using Electron’s archive format. Defaults to true. Node modules, that must be unpacked, will be detected automatically, you don’t need to explicitly set asarUnpack - please file issue if this doesn’t work.
Or you can pass object of asar options.
asarUnpack
A glob patterns relative to the app directory, which specifies which files to unpack when creating the asar archive.
将 asar
设置为 false
可以解决问题,但 electron-builder
不推荐这样做。
因此,将我需要解压缩的所有文件都包含在一个文件夹中,然后使用
"asarUnpack" : "my-folder/*"
是正确的方法。现在所有解压缩的文件都可以在 /resources/app.asar.unpacked/my-folder
要考虑的另一件事是,使用路径 './ResolvePosition.py'
将查看我的电子项目的根文件夹,而不是我的 NodeJS 文件所在的路径,我需要使用 :
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'])