我正在使用Python 3.7编写的后端创建清单应用程序。我正在使用Electron为其构建GUI,并使用Node.js模块“ python-shell”来与Python代码进行通信。我希望python-shell的所有代码都在单独的JavaScript文件(connector.js)中。如果我仅从命令行运行带有节点的文件,它就可以正常工作,但是从HTML Button调用该函数不起作用。
我知道在默认情况下对Electron nodeIntegration的最新更新之一是false,但是我确实将其设置为true。不幸的是,它仍然不允许我在Electron渲染器过程中与Node模块通信。如果我将connector.js代码复制到Electron使用的main.js文件中,并在应用程序启动时调用它,那么它确实可以工作,但是使用HTML按钮调用它显然也不起作用。
这是将nodeIntegration设置为true的Electron的main.js文件。
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脚本。 functional.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');
});
}
使用简单的脚本标签将其加载到HTML文件中
<script src="connector.js"></script>
并使用输入进行调用
<input type="submit" value="Button" onclick="test()">
我很确定我只是误解了Electron以及主进程和渲染器进程的工作方式。不幸的是,无论我在Internet上寻找什么,我似乎都无法获得切实可行的解决方案。
答案 0 :(得分:0)
在您的python文件中添加<div id='auth_top'>
<div id='auth'>
<a id='auth_google_link' href="/auth/google">
<img id='auth_google_img' src='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRw%0D%0AOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDggNDgiPjxkZWZzPjxwYXRo%0D%0AIGlkPSJhIiBkPSJNNDQuNSAyMEgyNHY4LjVoMTEuOEMzNC43IDMzLjkgMzAuMSAzNyAyNCAzN2Mt%0D%0ANy4yIDAtMTMtNS44LTEzLTEzczUuOC0xMyAxMy0xM2MzLjEgMCA1LjkgMS4xIDguMSAyLjlsNi40%0D%0ALTYuNEMzNC42IDQuMSAyOS42IDIgMjQgMiAxMS44IDIgMiAxMS44IDIgMjRzOS44IDIyIDIyIDIy%0D%0AYzExIDAgMjEtOCAyMS0yMiAwLTEuMy0uMi0yLjctLjUtNHoiLz48L2RlZnM+PGNsaXBQYXRoIGlk%0D%0APSJiIj48dXNlIHhsaW5rOmhyZWY9IiNhIiBvdmVyZmxvdz0idmlzaWJsZSIvPjwvY2xpcFBhdGg+%0D%0APHBhdGggY2xpcC1wYXRoPSJ1cmwoI2IpIiBmaWxsPSIjRkJCQzA1IiBkPSJNMCAzN1YxMWwxNyAx%0D%0AM3oiLz48cGF0aCBjbGlwLXBhdGg9InVybCgjYikiIGZpbGw9IiNFQTQzMzUiIGQ9Ik0wIDExbDE3%0D%0AIDEzIDctNi4xTDQ4IDE0VjBIMHoiLz48cGF0aCBjbGlwLXBhdGg9InVybCgjYikiIGZpbGw9IiMz%0D%0ANEE4NTMiIGQ9Ik0wIDM3bDMwLTIzIDcuOSAxTDQ4IDB2NDhIMHoiLz48cGF0aCBjbGlwLXBhdGg9%0D%0AInVybCgjYikiIGZpbGw9IiM0Mjg1RjQiIGQ9Ik00OCA0OEwxNyAyNGwtNC0zIDM1LTEweiIvPjwv%0D%0Ac3ZnPg=='/>
</a>
</div>
</div>
。看起来像这样:
module.exports
当您需要html文件作为变量时,上述代码将公开您的函数。像这样的html文件:
module.exports = {
test: function () {
PythonShell.run('functionality.py', options, function (err) {
if (err) throw err;
console.log('done');
});
}
}
我尚未在IDE中测试代码,因此对任何语法错误深表歉意。
有关在模块中导出功能的更多信息:In Node.js, how do I "include" functions from my other files?