Какой самый простой способ получить вывод скрипта Python в Интернете? - PullRequest
6 голосов
/ 08 апреля 2009

У меня есть скрипт Python, который работает непрерывно. Он выводит 2 строки информации каждые 30 секунд. Я хотел бы иметь возможность просматривать этот вывод в Интернете. В частности, я бы хотел, чтобы сайт автоматически обновлялся (добавляйте новый вывод вверху страницы / сайта каждые 30 секунд без обновления страницы).

Я понимаю, что могу сделать это с помощью javascript, но есть ли решение, основанное только на python? Является ли Javascript путь? Я более чем готов изучать javascript, если нужно, но если нет, я бы хотел сосредоточиться на python.

Извините за основной вопрос, но я все еще не понимаю, когда речь заходит о веб-программировании.

Thx!

Ответы [ 9 ]

5 голосов
/ 09 апреля 2009

Похоже, в этом вопросе есть две вещи.

  1. Презентация в Интернете. Это легко сделать в Python - используйте Django или TurboGears или любую основанную на Python веб-инфраструктуру.

  2. Обновление веб-страницы для отображения новых данных. Это можно сделать двумя способами.

    • Какой-нибудь модный Javascript для обновления.

    • Некоторый модный HTML для обновления страницы. Тег meta refresh - это то, что вам нужно. Если вы сделаете это, у вас будет полностью Python-решение.

3 голосов
/ 09 апреля 2009

Если вам нужен простой и простой способ печати данных из скрипта Python на веб-странице и автоматического обновления, вы можете просто распечатать его из скрипта. Например, используя Apache с приведенным ниже сценарием Python CGI:

#!/usr/bin/python 

import time
import sys
import random

def write(inline=''):
    sys.stdout.write(inline)
    sys.stdout.write('\r\n')
    sys.stdout.flush()

#prints out random digits between 1 and 1000 indefinitely
write("Content-type: text/html\r\n")
i = 0
while(True):
    i = i + 1
    time.sleep(1)
    write(str(i) + "<br />")

Если я перехожу к этому в браузере (Firefox, не знаю, могут ли другие браузеры работать по-разному в отношении буферизации и т. Д.), Он печатает цифры постоянно. Имейте в виду, что он печатается в последовательном порядке, поэтому новые данные располагаются внизу, а не сверху, но это может работать в зависимости от того, что именно вы хотите сделать.

Если это не совсем то, что вы ищете, единственный другой способ сделать это - автоматическое обновление страницы (либо в iframe, либо на всей странице) или с помощью javascript для извлечения данных.

Вы можете использовать мета-тег обновления в своем HTML-коде iframe или страницы, и ваш CGI может печатать новые данные каждый раз, когда они обновляются. Кроме того, вы можете использовать javascript с XMLHTTPRequest для чтения новых данных без визуального обновления страницы.

2 голосов
/ 09 апреля 2009

Если вы хотите сделать это полностью на Python, вы можете использовать пижаму .

Он генерирует javascript непосредственно из кода Python, поэтому вы не должны полностью писать javascript.

2 голосов
/ 09 апреля 2009

Вы можете использовать Комету , но я настоятельно не рекомендую вам это делать. Я бы просто написал короткий Javascript, используя jQuery , это действительно просто.

Другой возможностью является использование iframe, который перезагружается каждые 30 секунд, это предотвратит перезагрузку всей страницы.

1 голос
/ 09 апреля 2009

Возможно "длинный опрос" - это то, что вы ищете?

Длинный опрос может быть описан как «HTTP push», в основном у вас есть скрипт (Python), обслуживаемый через веб-сервер, который выводит данные только при наличии. Затем вы пытаетесь загрузить эту страницу асинхронно через Javascript, когда он не удается повторить попытку; при успешном выполнении вы что-то делаете с данными (обычно отображаете их)

Примеры моего ответа написаны на PHP, но на самом деле это всего лишь 2 команды (sleep(rand(1, 10)) - остальные несколько должны продемонстрировать обработку ошибок в JavaScript)

Ну, это не совсем так просто .. Вы не можете просто обслуживать скрипт Python CGI через Apache, потому что у вас закончатся рабочие потоки, а веб-сервер не сможет для принятия любых дальнейших подключений .. Итак, вам нужно использовать более специализированный сервер ..

  • Платформа витая Python идеально подходит для таких серверов - кстати, оба следующих сервера написаны с ней
  • cometd - «самый известный» сервер длинных опросов, хотя мне никогда не удавалось реализовать Python
  • slosh - кажется чрезвычайно простым в использовании .. Реализовано в Python, хотя вы можете взаимодействовать с ним через HTTP-запросы
1 голос
/ 09 апреля 2009

Запишите ваш вывод в файл журнала и загрузите файл журнала в браузер через веб-сервер. Если вам нужно автоматическое обновление, создайте шаблон HTML-файла с тегом для обновления каждые 15 секунд:

<META HTTP-EQUIV="refresh" CONTENT="15">

и используйте на стороне сервера, чтобы включить файл журнала на странице.

1 голос
/ 08 апреля 2009

Javascript вам так или иначе нужен для обновления в течение 30 секунд. Кроме того, вы можете установить обновление метатега на каждые 30 секунд для перенаправления на текущую страницу, но маршрут Javascript предотвратит мерцание страницы.

1 голос
/ 08 апреля 2009

JavaScript является основным способом добавления такого рода интерактивности на веб-сайт. Вы можете создать внутренний Python, но клиенту придется использовать вызовы JavaScript AJAX для обновления страницы. Python не работает в браузере, поэтому вам не повезло, если вы хотите использовать только Python.

(также можно использовать апплеты Flash или Java, но это довольно тяжелое решение для небольшой проблемы.)

0 голосов
/ 09 апреля 2009

Это для настоящего веб-приложения? Или вам удобно просматривать вывод в браузере? Если это так для удобства, вы можете использовать mod_python.

mod_python - это расширение для веб-сервера apache, которое встраивает интерпретатор python в веб-сервер (поэтому скрипт запускается на стороне сервера). Это легко позволит вам делать такие вещи локально или для вашего удобства. Тогда вы можете просто запустить скрипт с модом python и обработчик опубликует ваши результаты. Вы, вероятно, могли бы также легко реализовать освежение, но я бы не знал, как это сделать.

Надеюсь, это поможет ... проверьте mod_python. Это не так уж плохо, когда вы все настроите.

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