Автоматическое обновление веб-интерфейса для скрипта Python

У меня есть очень простой скрипт Python, который я использую для опроса последовательного устройства (модуль Xbee). По сути, это просто бесконечный цикл while. Каждую итерацию этого цикла я хочу, чтобы веб-страница обновлялась. Я видел много примеров, показывающих взаимодействие с пользовательским интерфейсом, когда пользователь нажимает кнопки, чтобы отправить сообщение ajax на сервер и обратно, но я хочу, чтобы внутренний цикл python выполнял обновление для клиента без взаимодействия с пользователем. Я просмотрел web.py и ajax, и, кажется, это правильный путь, я просто не могу заставить его работать и хотел бы получить помощь. Вот суть моего скрипта Python:

ser = serial.Serial('COM3', baudrate=9600)
while 1:
    data = ser.readline()
    if len(data) == 14:
        num = struct.unpack('BBBBBBBBBBBBBB', data)[9]
        if num == 1:
            // update the web client with 1
        elif num == 2:
            // update the web client with 2
        else:
            // update the web client with 0
    app.processEvents()

Установка работает на Ubuntu 12.04 с apache2 и python 2.7.


person Chuck Claunch    schedule 15.01.2013    source источник
comment
связанные: Потоковая передача данных с помощью Python и Flask   -  person jfs    schedule 15.01.2013
comment
Спасибо, вечером попробую и отчитаюсь.   -  person Chuck Claunch    schedule 15.01.2013
comment
J.F. Большое спасибо, вы нашли именно то, что я искал!   -  person Chuck Claunch    schedule 17.01.2013


Ответы (1)


Основное ограничение: вы не можете обновить веб-сайт, отображаемый на клиенте, из скрипта на вашем сервере. Вам нужно будет запрашивать данные с вашего веб-сайта через Javascript, а затем заставить ваш сервер возвращать обновленные данные.

На своем веб-сайте вы можете использовать

setInterval(function() {
    //do something
    }, 2000)

or

setTimeout(function() {
    //do something
    }, 2000)

делать что-то каждые две секунды. Тогда проще всего будет перезагрузить сайт.

window.location.reload()

Вы также можете использовать маленькую <iframe> для обновления только небольшой части.

Более сложным вариантом было бы использование AJAX, для этого я бы рекомендовал придерживаться хорошо зарекомендовавшей себя библиотеки, такой как jQuery: JQuery AJAX. jQuery также упрощает изменение содержимого вашего веб-сайта, просто взгляните на документацию.

person Thorsten Kranz    schedule 15.01.2013
comment
вы можете обновить клиент с сервера. Ссылка, которую я предоставил выше, показывает, как это сделать. - person jfs; 15.01.2013
comment
Понятно, спасибо, что указали на это. - person Thorsten Kranz; 15.01.2013