Запустить скрипт python в приложении Electron
у меня есть проект Electron, который выполняет некоторый скрипт python, используя модуль child_process NodeJS. Мой 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
Когда я создаю исполняемый файл для Windows с помощью модуля npm electron-builder
и запустите исполняемый файл с dist/win-unpacked/my-app.exe
, это не сработает, кажется, что мой скрипт не доступен с python ./my-script-py
.
Итак, как я могу заставить этот код работать для построенного проекта?
2 ответов
я решил свою проблему. Я объясню для возможных будущих читателей с той же проблемой.
используя electron builder, есть несколько вариантов, чтобы не упаковать исходный код приложения в электронный файл. Эти параметры:
Асар
следует ли упаковать исходный код приложения в архив, использование формата архива Electron. По умолчанию true. Узловые модули, которые должен быть распакован, будет обнаружены автоматически, вам не нужно явно установить asarUnpack - пожалуйста, файл проблема, если это не работает.
или вы можете передать объект параметров asar.
asarUnpack
шаблоны glob относительно каталога приложений, который указывает, какие файлы для распаковки при создании архива Асар.
задание asar
to 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",
...
и тогда dir будет в корне приложения:
let python = spawn('python', [path.join(app.getAppPath(), '..', 'python_scripts/my_script.py'])