Сообщения PythonShell, полученные только в конце выполнения скрипта python в Electron - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь создать приложение Electron, которое выполняет сценарий Python, но я не могу извлечь сообщения из python до конца сценария.

Это код в начале основной файл. js:

const { PythonShell } = require('python-shell');

let pyshell = new PythonShell('app.py');

console.log("MAIN: Script started")

pyshell.on('message', function (message) {
  console.log("Message from APP: " + message);
});

// end the input stream and allow the process to exit
pyshell.end(function (err, code, signal) {
  if (err) throw err;
  console.log('The exit code was: ' + code);
  console.log('The exit signal was: ' + signal);
  console.log('finished');
});

let seconds = 0
setInterval(function(){ 
  seconds = seconds + 5
  console.log("MAIN: " + seconds + " seconds"); }, 5000);

Это скрипт python:

import sys
import time

print("START")
time.sleep(10)
print("After 10 seconds")

Это оболочка:

MAIN: Script started
MAIN: 5 seconds
MAIN: 10 seconds
Message from APP: START
Message from APP: After 10 seconds
The exit code was: 0
The exit signal was: null
finished
MAIN: 15 seconds

1 Ответ

0 голосов
/ 24 марта 2020

Хорошо. Я нашел этот ответ на форуме github.

"Вывод, скорее всего, буферизован, это означает, что вы не отправили достаточно данных в flu sh буфер хотя бы один раз. Закрытие stdin (завершением process) заставляет буфер буферизовать грипп sh, в результате чего ваше приложение получает данные. Это очень часто, обычно вы не хотите записывать каждый байт, так как это будет слишком интенсивно для ввода-вывода. "

https://github.com/extrabacon/python-shell/issues/8

Поэтому я изменил свой код app.py для кода на

import sys
import time

print("START")
sys.stdout.flush()
time.sleep(10)
print("After 10 seconds")

и теперь вывод правильный

MAIN: Script started
Message from APP: START
MAIN: 5 seconds
MAIN: 10 seconds
Message from APP: After 10 seconds
The exit code was: 0
The exit signal was: null
finished
MAIN: 15 seconds

Надеюсь Не знаю, есть ли другие лучшие решения, но с этим он работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...