Как создать веб-страницу с кнопками, которые вызывают различные скрипты Python в системе, обслуживающей веб-страницу? - PullRequest
24 голосов
/ 16 января 2009

Я - любитель (и довольно новый) программист, который написал несколько полезных (для меня) сценариев на python для решения различных задач автоматизации системы, которые включают копирование, переименование и загрузку файлов среди прочих различных действий.

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

Проблема в том, что я не знаю, с чего начать расследование, как это сделать. Допустим, у меня есть скрипт с именем:

file_arranger.py

Что мне нужно сделать, чтобы веб-страница выполнила этот скрипт? Это не предназначено для общественного потребления, поэтому что-нибудь легкое было бы здорово. Что нужно для получения бонусных баллов, чтобы предоставить веб-пользователю вывод таких сценариев?

edit: первый ответ заставил меня понять, что я забыл указать, что это система Win2k3.

Ответы [ 9 ]

5 голосов
/ 16 января 2009

Эта страница на сайте python содержит хорошее описание и пример того, что вам нужно сделать, чтобы запустить скрипт CGI на python. Сначала начните с самого простого случая. Просто сделайте короткий скрипт, который печатает HTML.

#!/usr/bin/python                   #on windows change to your path to the python exe

print "Content-Type: text/html"     # HTML is following
print                               # blank line, end of headers
print "<TITLE>CGI script output</TITLE>"
print "<H1>This is my first CGI script</H1>"
print "Hello, world!"

Когда вы пытаетесь сделать это в первый раз, самое сложное - это выяснить, где разместить скрипт и как заставить веб-сервер распознавать и запускать его. Если вы используете веб-сервер Apache, посмотрите на эти шаги настройки .

Как только у вас будет работать этот простой скрипт, вам просто нужно добавить html-форму и тег кнопки и использовать свойство action, чтобы указать его сценариям, которые вы хотите запустить.

3 голосов
/ 16 января 2009

Этот простой подход не требует ничего, кроме стандартной библиотеки Python. Создайте эту структуру каталогов:

.
|-- cgi-bin
|   `-- script.py
|-- index.html
`-- server.py

Вы помещаете свои скрипты в каталог "cgi-bin", "index.html" содержит ссылки на скрипты в каталоге "cgi-bin" (поэтому вам не нужно вводить их вручную, хотя вы могли бы), и " server.py "содержит это:

import CGIHTTPServer
CGIHTTPServer.test()

Чтобы запустить свой сервер, просто запустите "server.py". Вот и все, нет Apache, нет других зависимостей.

НТН ...

2 голосов
/ 16 января 2009

Все, что вам нужно, это поместить его в каталог, настроенный на выполнение сценариев CGI, затем вам нужно добавить

#!/usr/bin/env python

наверх, и он должен выполнять скрипт как обычный скрипт на python, если вы ссылаетесь на него. (как вы бы файл HTML или PHP)

Это, конечно, предполагает, что ваш веб-сервер настроен на выполнение CGI вообще, и что у вас есть система linux.

Существуют и другие альтернативные решения, если вы хотите что-то более изощренное, например, mod_python и веб-фреймворки, такие как Pylons, но я думаю, что решение CGI лучше подойдет для вашего варианта использования.

[EDIT] * * +1010

В Windows, если у вас есть Apache, вы ДОЛЖНЫ иметь возможность использовать тот же метод, но заменив все, что стоит за #! с путем к вашему python.exe, вот так:

#!C:\Python25\python.exe -u

Очевидно, что -u необходим для перевода Python в небуферизованный режим по этой ссылке, которая также содержит более подробную информацию: http://www.imladris.com/Scripts/PythonForWindows.html

1 голос
/ 16 января 2009

Простой скрипт cgi (или набор скриптов) - это все, что вам нужно для начала. В других ответах рассказывалось, как это сделать, поэтому я не буду повторять это; вместо этого я подчеркну, что использование простого текста проделает вам долгий путь . Просто выведите заголовок (print("Content-type: text/plain\n"), плюс print добавляет собственную новую строку, чтобы получить необходимую пустую строку), а затем запустите обычную программу.

Таким образом, любой нормальный вывод вашего скрипта отправляется в браузер, и вам не нужно беспокоиться о HTML, экранировании, фреймворках и прочем. «Сделай самое простое, что могло бы сработать».

Это особенно подходит для неинтерактивных частных административных задач, которые вы описываете, и позволяет вам использовать идентичные программы из оболочки с минимумом суеты. Ваш драйвер, страница с кнопками, может быть статическим HTML-файлом с однокнопочными формами. Или даже список ссылок.

Чтобы продвинуться дальше, посмотрите на модуль ведения журнала (например, отправку сообщений INFO в браузер, но не на командную строку, или простую классификацию сообщений с помощью различных регистраторов, путем настройки ваших обработчиков), а затем начните рассматривать шаблон двигатели и каркасы.

Не выводите свой собственный HTML и переходите к использованию одной из многих существующих библиотек - это сэкономит массу головной боли, даже потратив немного дополнительного времени на изучение библиотеки. Или, по крайней мере, инкапсулируйте ваш вывод, эффективно написав свой собственный мини-движок.

1 голос
/ 16 января 2009

Вы должны посмотреть на CherryPy как на ваш обработчик HTTP-запросов, который можно настроить для работы поверх очень легкого NGINX веб-сервера (или Apache, если вы предпочитаете). *

Затем вы можете импортировать другие сценарии в службу, запущенную на CherryPy. Это даст вам немного больше контроля над процессом и обнаружением ошибок, если они возникают.

Другой вариант - просто указать операционной системе запустить команду с помощью os.system (). Проверьте здесь пример различных подходов к использованию os.system ().

0 голосов
/ 21 июля 2016

Если вы сейчас используете Python 3, print - это функция, требующая скобок.

#!/Python34/python
print ("Content-type: text/html\n")
print ("<html><head>")
print ("</head><body>")
print ("Hello World from Python Script.")
print ("</body></html>")
0 голосов
/ 16 января 2009

При настройке , пожалуйста, будьте осторожны, чтобы ограничить доступ к сценариям, которые предпринимают некоторые действия на вашем веб-сервере. Недостаточно поместить их в каталог, в котором вы просто не публикуете URL, потому что рано или поздно кто-нибудь их найдет.

Как минимум, поместите эти сценарии в место, защищенное паролем. Вы не хотите, чтобы кто-то в Интернете мог запускать ваши сценарии.

0 голосов
/ 16 января 2009

В предыдущем вопросе я попросил минимальную реализацию подключения сайта AJAX к Python . Это может выполнить то, что вы ищете. Он имеет кнопку, которая запускает некоторый код Python, а затем показывает результат на странице. Мое решение использует встроенный веб-сервер в Python, поэтому он действительно легкий (без дополнительных пакетов или даже Apache).

0 голосов
/ 16 января 2009

Если вы знаете свой путь к Apache , это должно помочь вам.

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