我试图创建一个本地网页,让连接到我的Wi-Fi的人通过Raspberry Pi与某些内容进行交互。例如,当他们转到localhost / page.html并单击按钮,歌曲开始播放,或者灯泡打开,音乐音量增大,或系统关闭等。
我之前设法做到了这一点,但它似乎太复杂了,我认为还有另一种方式。我这样做的方式:大多数按钮用于打开或关闭某些东西,所以让我们说它是一个打开/关闭音乐的按钮:我为该按钮分配了一个值,然后使用了PHP单击按钮时,使用+1增加其值。然后我使用了beautifoulsoup(网络抓取工具)来从网页获取值,看看它是奇怪还是偶数,并且使用python OS库我根据它打开了音乐。
所以,换句话说:当有人点击网页中的按钮没有使用PHP时,如何运行python命令?我读到了关于python web框架的内容,但是大多数内容似乎更关注我不需要的复杂内容。
谢谢你。 洛杉矶:显然有些人认为这个问题不清楚,并且暂时搁置'。我只是复制了我在上面写了5行的内容,这对我来说非常清楚:"当有人点击网页上的按钮时,如何运行python脚本。"
答案 0 :(得分:3)
网站分为前端和后端两个部分。前端管理网站的外观,而后端管理网站的行为方式。
您不能创建一个静态网站,可以在不使用后端语言的情况下进行任何类型的幕后处理,也不能使用您可以使用AJAX访问的某种API。
你必须使用一些后端编程语言/框架才能在后台运行任何。 PHP工作,Python工作,NodeJS,Ruby,任何可以充当后端框架的东西。
使用这些语言/框架中的任何一种,在后台运行脚本应该非常容易。
一个简单的例子是使用PHP创建一个作用于POST请求的Web页面,并相应地运行Python脚本。您可以使用数据库(MySQL是一个很好的例子),或者您可以编写Python脚本本身,以便它检查您以某种方式触发的任何状态。两者都应该有用。
正如Johann Bauer在评论中所提到的,在PHP的情况下,您应该能够运行exec来运行Python命令,而不是使用Python Web scraper。
答案 1 :(得分:0)
您可以在RPI上运行Apache或其他Web服务器,然后将Python脚本作为CGI脚本运行。
即。当您调用某个网址(例如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>"
如果在Web服务器设置中启用CGI脚本并将此脚本放入Web服务器的CGI目录中,则可以从Web浏览器中调用它。
Web浏览器将接收打印出的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,Flask等框架的方法。
另一种方法是做类似的事情,这是更现代的,这是使用服务器的Python模块。
Apache和其他一些Web服务器都有这样的模块。
当您这样做时,Python解释器在Web服务器内运行,并且每次有人调用URL时,您的脚本都不会作为新进程启动。
一切都像PHP一样。
编写这样的脚本与编写CGI脚本类似。
还有第三种方式。
您可以使用Python编写自己的HTTP服务器,该服务器将根据其收到的URL进行操作。
为此,您可以使用Python的标准库中已编写的SimpleHTTPServer。
只需导入它,将其子类化,然后以不同的方式对不同的URL做出反应。