在electron.js中调用Python脚本时出错

时间:2019-07-08 06:43:59

标签: python electron

当用户单击按钮时,我正在尝试调用python脚本。我正在使用electron.js。当我在应用程序的开头调用脚本时,会正确调用脚本,但是当用户单击按钮时尝试执行脚本时,脚本不会执行。我正在使用js模块python-shell。

这是我的代码:

main.js:

const electron = require('electron')

// Module to control application life.
const app = electron.app
// Module to create native browser window.
const BrowserWindow = electron.BrowserWindow

const path = require('path')
const url = require('url')

// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let mainWindow

function createWindow () {
  // Create the browser window.
  mainWindow = new BrowserWindow({width: 800, height: 600})



  // and load the index.html of the app.
  mainWindow.loadURL(url.format({
    pathname: path.join(__dirname, '/gui/gui.html'),
    protocol: 'file:',
    slashes: true
  }))

  // Open the DevTools.
  // mainWindow.webContents.openDevTools()

  // Emitted when the window is closed.
  mainWindow.on('closed', function () {
    // Dereference the window object, usually you would store windows
    // in an array if your app supports multi windows, this is the time
    // when you should delete the corresponding element.
    mainWindow = null
  })
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)

// Quit when all windows are closed.
app.on('window-all-closed', function () {
  // On OS X it is common for applications and their menu bar
  // to stay active until the user quits explicitly with Cmd + Q

    app.quit()
})

app.on('activate', function () {
  // On OS X it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (mainWindow === null) {
    createWindow()
  }
})

gui.html:

<head>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
  <script src="linkers/TestModem.js"></script>
</head>

<body>
  <div class="container">
    <div class="jumbotron">
      <h1>Powered by Python</h1>
      <p>Rendered by HTML and JavaScript</p>
    </div>
    <br>
    <div class="row">
    <div class="col-xs-4">
      <br>
      <button id="prueba" class="btn btn-success" onclick="get_weather()">Start Test</a></button>
    </div>
    <div class="col-xs-4">
    </div>
</div>
</div>
<body>

还有TestModem.js

let {PythonShell} = require('python-shell')
var path = require("path")

function get_weather() {

  var options = {
    scriptPath : path.join(__dirname, 'engine/'),
    //sargs : [city]
  }

  let pyshell = new PythonShell('weather_engine.py', options);


  pyshell.on('message', function(message) {
    console.log("data: ",message.toString('utf8'));
  })

}

但是什么也没发生。 python代码就是:

import sys

print("hello")

sys.stdout.flush()

我重复一遍,如果我将TestModem.js的内容写到main.js文件中,它将被正确执行。我做错了什么?路径是正确的。我必须在代码中包含一些行吗? 谢谢

0 个答案:

没有答案