Можно ли использовать веб-страницу в качестве пользовательского интерфейса для программы, написанной на Python, работающей локально, без веб-сервера?

У меня есть программа, написанная на Python, и я хотел бы упростить ввод значений параметров для этой программы через графический интерфейс. Я понимаю, что могу создать графический интерфейс с помощью инструментов python, но мне интересно использовать страницу html / javascript, и код javascript вызывает мой сценарий python, когда пользователь нажимает кнопку для запуска. Что-то типа;

var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "../scripts/python_script.py", true);
xmlhttp.send();

В настоящее время, когда я это делаю, я просто возвращаю текст в скрипт python, но на самом деле он не запускается. В идеале скрипт python должен работать в фоновом режиме, не блокируя дальнейший ввод на веб-страницу, и поскольку скрипт создает разные файлы результатов (изображения png), они будут отображаться в браузере. Ясно, что я мог бы сделать это с помощью веб-сервера (и я могу в конечном итоге сделать это в любом случае, отсюда и интерфейс html), но мне интересно, можно ли это сделать без него. Таким образом, я мог упаковать html-страницу и скрипт python вместе и передать их кому-нибудь, кто затем мог запустить программу на своем компьютере без необходимости запускать веб-сервер. Это возможно?

Если нет, есть ли альтернативный способ добиться аналогичного результата? Могу ли я встроить небольшой сервер в сценарий python, который при запуске отображает страницу html, а затем отвечает на XMLHttpRequest для запуска сценария python? Если бы я сделал это, пришлось бы пользователю запускать скрипт, а затем переходить по указанному адресу в своем браузере в качестве отдельного действия?

РЕДАКТИРОВАТЬ: У меня есть быстрое решение, работающее с использованием SimpleHTTPServer, но я взглянул на бутылку и, вероятно, попробую что-нибудь, используя это. Спасибо за вашу помощь.


person savagent    schedule 13.10.2011    source источник
comment
Похоже, это было бы довольно опасно, если бы это было возможно!   -  person Richard Dalton    schedule 13.10.2011
comment
Веб-сервер - это просто программа, которая будет слушать запрос браузера и соответственно отвечать. Использование веб-сервера не означает, что вам нужно использовать Apache или какие-либо другие дополнительные функции. Вы можете использовать чистый веб-сервер Python, такой как тот, который включен в стандартную библиотеку (SimpleHTTPServer) или любую другую библиотеку. Кстати, документация python (pydoc) передается в браузер точно так же, как вы хотите.   -  person Hernan    schedule 13.10.2011


Ответы (2)


Прежде всего, используя что-то вроде bottle, довольно просто создать веб-сервер для запуска вашего скрипта. См. http://bottlepy.org/docs/dev/.

Хорошей отправной точкой является код на http://bottlepy.org/docs/dev/tutorial.html#http-request-methods, но вы бы разместили форму с запросом параметров, а не форму входа в систему. Затем просто запустите свой скрипт Python, запишите результат и отправьте его обратно в операторе return.

В этом вопросе захватить выходные данные подпроцесса показаны два способа запуска основного сценария в зависимости от того, хотите ли вы показать выводить постепенно или полностью в конце.

person Michael Dillon    schedule 13.10.2011

Вам нужно будет связать с приложением какой-то веб-сервер. Если он не предназначен для развертывания, я бы выбрал что-то вроде bottle.py. Это микро-веб-фреймворк, у которого есть собственный сервер разработки. Другие микро / мини-фреймворки, вероятно, упаковывают с собой собственный веб-сервер для целей разработки (web2py, flask, ..). Если вам нужно что-то более серьезное, вам, вероятно, понадобится лучший веб-сервер. В этом случае просмотрите это обсуждение Reddit.

person rplnt    schedule 13.10.2011