2016-12-10 2 views
-2

Я пытаюсь создать локальную веб-страницу, которая позволяет людям, подключенным к моему Wi-Fi, взаимодействовать с некоторыми вещами через малину Pi. Например, когда они переходят на localhost/page.html и нажимают кнопку, начинает воспроизведение песни или включается лампочка или громкость музыки увеличивается или система выключается и т. Д.Запуск команды python при нажатии кнопки

Мне удалось делать это раньше, но это казалось слишком сложным, и я предполагаю, что есть другой путь. То, как я это сделал: большинство кнопок использовались для включения или выключения чего-либо, так что предположим, что это кнопка, которая включает/выключает музыку: я присвоил значение этой кнопке, а затем использовал PHP, чтобы увеличить его значение с помощью +1 всякий раз, когда нажимается кнопка. Затем я использовал beautifoulsoup (инструмент для очистки веб-страниц), чтобы получить значение с веб-страницы и посмотреть, не странно или нет, и с помощью библиотеки ОС python я включил музыку в зависимости от нее.

Итак, чтобы перефразировать: как я могу запустить команду python, когда кто-то нажимает кнопку на веб-странице, без с использованием PHP? Я читал о веб-фреймах python, но большинство из них, похоже, больше сосредоточено на сложных вещах, которые мне не нужны.

спасибо.

LA: По-видимому, некоторые люди думают, что вопрос непонятен и помечен 'на удержание'. Я просто скопирую то, что написал 5 строк выше, что показалось мне довольно понятным:

«Как запустить скрипт python, когда кто-то нажимает кнопку на веб-странице».

+1

Почему бы вам просто не использовать 'exec' в вашем скрипте PHP для запуска вашего скрипта python напрямую? –

+0

Я пробовал, но только несколько команд работали при использовании «exec», я не знаю, почему (возможно, для того, чтобы не давать разрешения для их выполнения или что-то в этом роде). Я сделаю некоторое исследование об этом и попробую еще раз. – C10H15N

ответ

0

Вы можете запустить Apache или какой-либо другой веб-сервер в своем RPI, а затем запустить скрипт Python как скрипт CGI.

I.e. Когда вы вызываете некоторый url (например, http://localhost/cgi-bin/mypython.py), веб-сервер запускает этот скрипт и возвращает стандартный вывод (все напечатанные) в ваш веб-браузер.

Пример очень простой скрипт будет:

#! /usr/bin/env python 
print "Content-Type: text/html\n" 

print "<html><head><title>Hello world!</title></head>" 
print "<body>This is a Python CGI hello world example</body></html>" 

Если включить CGI скриптов в настройках веб-сервера и поместить этот скрипт в каталог CGI веб-сервера, вы сможете вызвать его из веб-браузера.

Веб-браузер получит заголовки HTTP (Content-type ...) и HTML, которые распечатываются.

Когда вы хотите, чтобы ваш сценарий, чтобы иметь возможность получить аргументы через HTTP GET или POST методы, с помощью модуля CGI:

#! /usr/bin/env python 
import cgi 
# Uncomment the following to be able to see traceback in your browser 
# if there is any: 
#import cgitb 
#cgitb.enable() # When you are done debugging, comment this back 

# Get input from query string or POST method: 
i = cgi.InputStorage() 
# Mandatory HTTP header: 
print "Content-Type: text/html\n" 
# ** At end of headers must be two \n. One is in there, another is added by print statement 
# Web site contents: 
print "<html><head><title>Hello world!</title></head>" 
print "<body>" 
print "This is a Python CGI hello world example<br>" 
follow = '<a href="http://localhost/cgi-bin/this_script.py?something=blah+blah+blah">Click here to see how something happens!</a>' 
if i.has_key("something"): 
    follow = "<b>Something happened!</b><br>" 
    follow += "The arg 'something' has value: "+i["something"].value 
print follow 
print "</body></html>" 

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

Сценарий может представлять обратно страницу index.html, когда это делается с его действием:

#! /usr/bin/env python 
# Do some work... 
# And then: 
print "Content-Type: text/html\n" 
f = open("/var/www/index.html", "rb") 
print f.read() 
f.close() 

Это только один из способов сделать это без каких-либо рамок, как Django, термос и т.д.

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

Существует такой модуль для Apache и некоторых других веб-серверов.

Когда вы делаете это так, интерпретатор Python запускается внутри веб-сервера, и ваш скрипт не запускается как новый процесс каждый раз, когда кто-то вызывает URL-адрес.

Все очень похоже на PHP.

Написание такого скрипта аналогично написанию сценария CGI.

Существует третий способ.

Вы можете написать свой собственный HTTP-сервер в Python, который будет действовать по URL-адресу, который он получает.

Для этого вы можете использовать уже написанный SimpleHTTPServer из стандартной библиотеки Python.

Просто импортируйте его, подклассируйте его и сделайте так, чтобы он реагировал на разные URL-адреса по-разному.

3

Веб-сайты делятся на две части: front-end и back-end. Front-end управляет тем, как выглядит веб-сайт, а в фоновом режиме управляет тем, как работает веб-сайт.

Вы не можете создать статический веб-сайт, который может выполнять любую обработку за кадром, не используя внешний сервер, или используя какой-либо API, с которым вы можете получить доступ, используя AJAX.

Вы должны использования некоторых фоновым язык программирования/рамочным, чтобы иметь возможность запускать ничего в фоновом режиме. Работает PHP, работает Python, NodeJS, Ruby, все, что может работать как базовая структура.

Использование любого из этих языков/фреймворков должно быть довольно простым для запуска сценариев в фоновом режиме.

Простым примером может быть использование PHP для создания веб-страницы, которая действует на запрос POST и соответственно запускает скрипт Python. Вы можете использовать базу данных (MySQL - хороший пример), или вы можете закодировать сам скрипт Python, чтобы он проверял статус того, что вы вызываете каким-то образом. Оба должны работать.

Как отметил Иоганн Бауэр в комментарии в случае PHP, вместо использования веб-скребка Python вы должны запустить exec для запуска команды Python.

+0

Имеет смысл, спасибо! Я пытался избежать установки PHP, Apache, MySQL для переносимости. Я думал, что это проще, используя только то, что Linux дает по умолчанию. – C10H15N