在js上关闭一个PythonShell(电子+烧瓶)

时间:2019-03-11 16:06:51

标签: python node.js electron

我在Google周围搜索,但是我找不到合适的答案,我不得不说我是NodeJS和electronic的新手:我的问题是我已使用Python-Shell将我的电子应用程序与flask连接起来,但是当我关闭我的应用程序,即使关闭终端,flask仍在后台运行。

这是我将应用程序连接到烧瓶的方法:

var pyshell =  require('python-shell');

  pyshell.PythonShell.run('engine.py',  function  (err, results)  {
    if  (err)  console.log(err);
  });

有什么办法可以“撤消”(关闭,退出,杀死)pyshell吗? 我已经尝试过了,但是没有用:

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    pyshell.kill('engine.py'); // <-- I'm guessing here
    app.quit()
  }

这是完整的代码,很短,可能对识别问题很有用:

const {app, BrowserWindow} = require('electron')

function createWindow () {
  window = new BrowserWindow({width: 800, height: 600})
  window.loadFile('index.html')

  var pyshell =  require('python-shell');

  pyshell.PythonShell.run('engine.py',  function  (err, results)  {
    if  (err)  console.log(err);
  });
}

app.on('ready', createWindow)
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    pyshell.kill('engine.py'); // <-- I'm guessing here
    app.quit()
  }
})

1 个答案:

答案 0 :(得分:1)

使用pyshell.kill()并没有杀死进程,而是表明子进程停止了。但是,孩子有时无法停下来。

尝试使用tree-kill npm软件包杀死该进程,它可以很好地处理此类情况。

// Declaring tree-kill
var kill = require('tree-kill');

//Killing python process
kill(pyshell.pid);