Я создаю приложение для инвентаризации с бэкэндом, написанным на Python 3.7.Я использую Electron для создания графического интерфейса для него и модуля "python-shell" модуля Node.js для связи с кодом Python.Я хотел бы, чтобы весь код для python-shell находился в отдельном файле JavaScript (connector.js).Если я запускаю только этот файл с узлом из командной строки, он работает отлично, но вызов функции из кнопки HTML не работает.
Я знаю, что с одним из последних обновлений Electron nodeIntegration по умолчаниюложно, но я установил это на истину.К сожалению, это все еще не позволяет мне общаться с модулем Node в процессе рендеринга Electron.Если я скопирую код соединителя.js в файл main.js, используемый Electron, и вызову его при запуске приложения, он работает, но вызов его с помощью кнопки HTML также явно не работает.
Этоэто файл main.js для Electron, для которого для nodeIntegration задано значение true.
const {app, BrowserWindow, Menu} = require('electron')
const fs = require('fs')
let mainWindow
function createWindow() {
mainWindow = new BrowserWindow({
// Set fixed size of main window
width: 1280,
height: 768,
resizable: false,
webPrefrences: {
nodeIntegration: true,
}
})
mainWindow.loadFile('./main.html')
mainWindow.on('closed', function () {
mainWindow = null
})
//Opens the dev tools by default.
mainWindow.webContents.openDevTools();
}
// Disable the default Menu Bar
Menu.setApplicationMenu(null)
app.on('ready', createWindow)
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})
app.on('activate', function () {
if (mainWindow === null) createWindow()
})
И это файл connector.js, который вызывает скрипт Python с правильными аргументами.functions.py предназначен для тестирования очень простого скрипта, который принимает первый аргумент командной строки (в данном случае addNewDataset
) для вызова функции, а второй - в качестве имени создаваемого файла.
const {PythonShell} = require('python-shell')
var options = {
mode: 'text',
encoding: 'utf8',
pythonPath: 'python3',
pythonOptions: ['-u'],
scriptPath: './',
args: ['addNewDataset', 'testDataset123']
};
function test() {
PythonShell.run('functionality.py', options, function (err) {
if (err) throw err;
console.log('done');
});
}
Itзагружается в файл HTML с помощью простого тега сценария
<script src="connector.js"></script>
и вызывается с использованием ввода
<input type="submit" value="Button" onclick="test()">
Я совершенно уверен, что просто неправильно понимаю, как Электрон и основной ирендерер обрабатывает работу.К сожалению, независимо от того, что я ищу в Интернете, я не могу найти решение, которое действительно работает.