Я новичок в Javascript, поэтому я хотел бы свести его к минимуму. Есть ли способ использовать Electron для связи со скриптом python без node.js? Мое приложение - это просто базовое приложение, которое принимает некоторый ввод от пользователей с html-страницы, и мне нужно, чтобы этот текстовый ввод обрабатывался в python и записывался в файл excel. Итак, в html мало что происходит, так что есть ли простой способ передать ввод в файл python? Я хочу использовать Electron, потому что мне нужно, чтобы этот html был моим пользовательским интерфейсом, а также мне нужно распространять это приложение.
Могу ли я использовать Electron без node.js?
Ответы (2)
Я предполагаю, что ответ «нет»: основной узел, выполняющий процесс, всегда будет там.
Приложение Electron состоит из основного процесса JavaScript и одного или нескольких процессов рендеринга JavaScript. Встроенной поддержки Python нет. И пользователю потребуется уже установленный Python. Таким образом, это звучит как плохое соответствие тому, что вам нужно.
ответы здесь могут быть полезны и покажут, как вызывать скрипт python. Я бегло просмотрел упомянутый там инструментарий flexx. Кажется, он работает с браузером пользователя, а не создает один исполняемый файл.
Недавно я сделал это с помощью какого-то трюка, надеюсь, это поможет вам, и есть следующий шаг, которому я следовал:
- Создал автономный исполняемый файл python с помощью pyinstaller, и у исполняемого файла есть фляжный сервер, затем я поместил фляжный сервер в свое приложение node.
Теперь нам нужно инициировать наш фляжный сервер и отправить ему запрос на обработку, я сделал это с помощью функции «execFile» в качестве дочернего процесса, для которого я создал функцию, и код был примерно таким:
async function callFlask(){ var child = require('child_process').execFile; child('path_to_python_exe ', function(err, data) { if(err){ console.error(err); return; } }); }
Теперь мы инициировали наш фляжный сервер, а затем отправим запрос с помощью запроса на выборку, например
await callFlask().then( await fetch('host_ip_defined_in_flask'+encodeURIComponent('data'))
- Now further we can extend our then chain to get response from python if any and proceed further forexample -
await callFlask().then( await fetch('host_ip_defined_in_flask'+encodeURIComponent('data')) .then(res => res.text()) .then(body => console.log(body)))
Здесь ваши выходные данные, которые возвращает python, будут напечатаны в консоли, после чего вы можете заставить ваше приложение узла вести себя по-разному в зависимости от возвращаемого им вывода.
- Также вы можете упаковать свое приложение с помощью доступных упаковщиков для электрона, таких как электронный упаковщик, это будет работать как шарм.
Также есть некоторые недостатки использования python, так как он увеличит размер вашего пакета, и процесс будет сложно убить от электрона после обработки, что увеличит нагрузку на хост-компьютер.
Я предполагаю, что объяснение создания сервера фляг не входит в рамки этого вопроса, вместо этого, если у вас возникнут какие-либо проблемы, дайте мне знать, я надеюсь, что это поможет...