Как показать ход выполнения скрипта python оператор за оператором в режиме реального времени в браузере с фреймворком Flask?

Я пытаюсь преобразовать сценарий командной строки, написанный на python, в веб-приложение.

Я намерен разработать веб-приложение с использованием python и flask. Пользователь введет некоторые данные на веб-странице и отправит их. Затем входные данные будут переданы в качестве аргументов функции, написанной на питоне (в основном старый скрипт). Эта функция будет делать много вещей. Поскольку функция выполняется, я хотел бы показать статус выполнения функции (выполненные шаги) на веб-странице в режиме реального времени.

Например, если пользователь вводит значения для полей - radius, length, breadth, base, height на веб-странице и нажимает кнопку submit, запускается функция с именем calculate_area(radius, length, breadth, base, height), и приложение должно периодически отправлять область для круга, прямоугольника и треугольника один за другим с некоторым временем. задержка между каждым расчетом площади. Например.

   Calculating area of circle ...
   Area of circle is - xxx
   Calculating area of rectangle ...
   Area of rectangle is - yyy
   Calculating area of triangle ...
   Area of triangle is - zzz

Может ли кто-нибудь указать мне, что может помочь в достижении этого? Заранее спасибо.


person Ira    schedule 07.01.2020    source источник
comment
вам придется использовать JavaScript/AJAX, чтобы периодически запрашивать результаты у сервера.   -  person furas    schedule 07.01.2020
comment
Отвечает ли это на ваш вопрос? Приложение Flask: обновление индикатора выполнения во время выполнения функции   -  person metatoaster    schedule 07.01.2020
comment
Что ж, вместо индикатора выполнения было бы лучше, если бы я показывал пользователю некоторый статус на веб-странице.   -  person Ira    schedule 07.01.2020
comment
@furas - не могли бы вы уточнить или поделиться ссылкой? Спасибо!   -  person Ira    schedule 07.01.2020


Ответы (1)


@metatoaster указал вам правильное направление: Приложение Flask: обновить индикатор выполнения во время функция запускается Вместо того, чтобы возвращать целое число в качестве прогресса, вы можете вернуть строку (например, "Вычисление площади круга...")

На вашей веб-странице вам нужно будет опросить ход выполнения с помощью JavaScript/JQuery/AJAX и добавить его к HTML div или textarea, как показано в примере.

const logarea = $('#logarea');
setInterval(update_progress, 500); // Polling every 500ms

function update_progress() {
    $.get('progress/' + task_id, function (progress) {    
        if (logarea.val().indexOf(progress) === -1) {
            logarea.val(logarea.val() + progress + '\n');
        }
    });
}
person Pieter Moens    schedule 08.01.2020