закрыть PythonShell на js (electron flask)

#python #node.js #electron

#python #node.js #electron

Вопрос:

Я погуглил, но не могу найти правильного ответа, должен сказать, что я довольно новичок в NodeJS и electron: Моя проблема в том, что я подключил свое приложение electron к flask с помощью 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:

Использование pyshell.kill() на самом деле не остановило процесс, скорее, оно сигнализирует дочернему процессу об остановке. Однако иногда дочернему элементу не удается остановиться.

Попробуйте использовать tree-kill пакет npm, чтобы остановить этот процесс, он отлично справляется с такими сценариями.

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

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

Комментарии:

1. Большое вам спасибо, к сожалению, я давно заархивировал этот проект из-за других приоритетов, я попробую это, как только снова начну работать над этим. 😉