Я создал свою микро-веб-фреймворк с флягой, которая использует ткань для вызова сценариев оболочки, которые находятся на удаленных серверах.Колба Python, возвращающая значения в реальном времени
Скрипт оболочки может занять больше времени, чтобы завершить работу. Я отправляю запрос POST из своего браузера и ожидаю результатов.
Ткань отображает содержимое реального времени на экране запуска колбы, но флажок возвращает значения в браузер после завершения этого удаленного сценария.
Как я могу сделать свою флягу для печати значений реального времени на моем экране браузера?
Моя колба часть:
@app.route("/abc/execute", methods=['POST'])
def execute_me():
value = request.json['value']
result = fabric_call(value)
result = formations(result)
return json.dumps(result)
Моя ткань часть:
def fabric_call(value):
with settings(host_string='my server', user='user',password='passwd',warn_only=True):
proc = run(my shell script)
return json.dumps(proc)
Update
Я попытался streamin`, а также. Но это не сработало. Результат выводится на мой curl POST после завершения выполнения скрипта. Что мне не хватает?
@app.route("/abc/execute", methods=['POST'])
def execute_me():
value = request.json['value']
def generate():
for row in formations(fabric_call(value)):
yield row + '\n'
return Response(generate(), mimetype="text/event-stream")
Прежде всего, JSON и в реальном времени не смешиваются. Если вы вернете JSON, вы можете вернуть только объект целиком. Конечно, вы можете возвращать несколько объектов JSON (например, по одному на строку). Чтобы сделать что-то подобное в фляге, вам нужно вернуть ответ, обертывающий генератор, который дает данные, когда он готов к отправке: http://flask.pocoo.org/docs/patterns/streaming/ – ThiefMaster
@ThiefMaster: именно это что я пробовал сейчас. Посмотрите мое обновление – Sathy