Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Хтмл-интерфейс для програм на питоне


Автор: kulibinka 10.6.2007, 15:39
Есть скрипт на питоне. К нему нужно приделать интерфейс. 

Такой вопрос: можно ли использовать для этой цели обычный хтмл? (== как при клике на ссылке запустить нужную ф-ю этого скрипта).

Автор: cherep 10.6.2007, 18:41
Очевидно, как. Использовать серверную часть, будь-то CGI, WSGI, какой-нибудь фреймворк (Django, TG, ...). Именно для того оно и придумано, по большому счету.

Автор: kulibinka 10.6.2007, 19:45
Да в том то и дело что я без серверной части хочу обойтись. Т.е. просто есть скрипт, и есть страничка с которой я смогу сделать запуск этого скрипта...

Уверен что есть  простой способ на html-страницы  кликом выполнить запуск любой программы - это первый шаг к решению...

Автор: pythonwin 10.6.2007, 20:20
Цитата(kulibinka @  10.6.2007,  22:45 Найти цитируемый пост)
Уверен что есть  простой способ на html-страницы  кликом выполнить запуск любой программы - это первый шаг к решению... 

хотел бы увидеть этот способ smile

Автор: kulibinka 10.6.2007, 20:35
Ну, для того чтобы этот способ увидеть я и создал этот пост smile
(хотя думаю, ответ лежит не в питонной, а в какой-то явоскриптовой области)

Автор: pythonwin 10.6.2007, 22:07
Цитата(kulibinka @  10.6.2007,  23:35 Найти цитируемый пост)
(хотя думаю, ответ лежит не в питонной, а в какой-то явоскриптовой области) 

вроде серверная часть js позволяет это делать, но это тоже будет серверная часть smile
на клиентской части js это не сделать...
думаю лучше постать что-то питоновское на сервер и не изобретать велосипед smile

Автор: kulibinka 11.6.2007, 05:58
Вот тут http://forum.vingrad.ru/forum/topic-77129/unread-1/anchor-entry1164376/0.html нашел схожую тему - говорят что все можно...
Жду ответа на вопрос "как" smile

Автор: setq 11.6.2007, 10:32
Модератор:  Если хотите, перенесу тему в Javascript.

Автор: kulibinka 12.6.2007, 10:44
Цитата(setq @  11.6.2007,  10:32 Найти цитируемый пост)
Если хотите, перенесу тему в Javascript. 

Если Вам тоже кажется что ответ там вылезет - перенесите пожалуйста.

Автор: Ulysses4j 12.6.2007, 11:20
HTML и Javascript ничего запускать не умеют. Запускать программы на выполнение могут ActiveX объекты, которые работают только в IE, и Java-апплеты, которые кроссбраузерны. Но и это не является их профилем, чтобы добиться такой фунциональности нужно ими весьма искуссно владеть. А вы пытаетесь изобрести велосипед под названием web-сервер. То что вы описали - это ровно его функциональность.

Автор: astoon 12.6.2007, 12:36
Если не использовать существующие вэб-серверы, тогда нужно писать свой smile.
То есть добавить к Вашему скрипту небольшой модуль с циклом: слушать сокет - обработать запрос - ответить/или закончить.
На обработку запроса - пара-тройка функций, разбирающих запросы, скажем, в кортеж из двух словарей: один - параметры GET, второй - остальные из заголовка.
Что-то примерно так:
Код

# func - это main Вашего скрипта, принимающий в качестве аргументов HTTP-запросы и возвращающий ответы.
 def Server(func, port='33333', host='127.0.0.1'):
    srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    srv.bind((host, port))
    srv.listen(1)

    while True:
        sock, addr = srv.accept()
        data = sock.recv(1024)
        rez, directiva = func(Parser(data)) # разборщик и основной скрипт

        # закончить работу
        if directiva == 'quit':
            sock.close()
            break

        # ответить и закончить
        if directiva == 'bye':
            sock.send(rez)
            sock.close()
            break

        # ответить и слушать далее
        if directiva == 'continue':
            sock.send(rez)
            sock.close()
def Parser(data):
      (разбирает запрос в удобные для Вашего скрипта два словаря и возвращает его)


Запускаем приложение, вызывая код такого типа:
Код

import server # самописный сервер
import app # ваш скрипт
import os

syscall = os.system('firefox 127.0.0.1:33333 &') # в Unix
server.Server(app.main, 33333) # пока файрфокс будет запускаться, сервер уже готов слушать-оствечать.


Самая лабуда здесь - четко соблюдать открытие - закрытие сокета, а то будет
"сокет занят"  при повторном запуске программы.
Если не ошибаюсь, при удалениии всех ссылок на сокет, Питон-интерпретатор должен его закрыть,
однако в реальности он не успевает это сделать.

Поправьте, если где не прав.

ЗЫ. А вообще есть готовые мини-серверы на Питоне, на форуме где-то были ссылки.

Автор: Void 12.6.2007, 16:45
Я, кажется, понял. Вам нужен встроенный HTML-рендерер, что-то вроде http://www.terrainformatica.com/htmlayout/. К сожалению, насколько мне известно, это единственная пригодная для построения GUI библиотека такого рода, и обёрток для Питона к ней не наблюдается.

Цитата(astoon @  12.6.2007,  14:36 Найти цитируемый пост)
А вообще есть готовые мини-серверы на Питоне, на форуме где-то были ссылки. 

Конечно есть. Модули BaseHTTPServer, SimpleHTTPServer, wsgiref.simple_server в стандартной поставке.

Автор: Ulysses4j 12.6.2007, 16:54
Цитата(Void @  12.6.2007,  17:45 Найти цитируемый пост)
HTMLayout

Ну да, вместо эмуляции веб-сервера предлагается воспользоваться эмуляцией браузера. Интересно, конечно...

Цитата(pythonwin @  10.6.2007,  23:07 Найти цитируемый пост)
 серверная часть js

Ох и много бы я отдал, чтобы посмотреть на "серверную часть" JS...

Автор: pythonwin 12.6.2007, 19:22
Цитата(Ulysses4j @  12.6.2007,  19:54 Найти цитируемый пост)
Ох и много бы я отдал, чтобы посмотреть на "серверную часть" JS... 

она платная и вроде дорогая - можешь спросить в разделе по JS
PS для адмимнистрации - думаю лучше перенести тему в раздел python-web

Автор: dvska 20.6.2007, 23:23
Да-да, как уже описали astoon и Void, никакого Javascript'а не нужно, а нужно запущать прогу из-под простейшего web-сервера (web.py, wsgiref.simple_server, quixote, cherrypy ....). http://google.com/search?q=%2Bpython+%22%D0%9E%D0%BB%D0%B5%D0%B3+%D0%91%D1%80%D0%BE%D0%B9%D1%82%D0%BC%D0%B0%D0%BD%22+%7C%22Oleg+Broitmann%22 даже, помнится, в еxe-шники это всё заворачивал с помощью py2exe..

Автор: pythonwin 21.6.2007, 06:59
Цитата(dvska @  21.6.2007,  02:23 Найти цитируемый пост)
а нужно запущать прогу из-под простейшего web-сервера (web.py, wsgiref.simple_server, quixote, cherrypy ....)

согласен что хоть какая-то серверная часть нужна, но постановка задачи такая:
Цитата(kulibinka @  10.6.2007,  22:45 Найти цитируемый пост)
Да в том то и дело что я без серверной части хочу обойтись. Т.е. просто есть скрипт, и есть страничка с которой я смогу сделать запуск этого скрипта...

Уверен что есть  простой способ на html-страницы  кликом выполнить запуск любой программы - это первый шаг к решению... 

:(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)