从 JavaScript 函数运行 Python 脚本 [英] Run Python scripts from JavaScript functions
本文介绍了从 JavaScript 函数运行 Python 脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我们需要运行 Python 代码,该代码将从 JavaScript 中控制 Raspberry Pi 3 的 GPIO.(JavaScript 正在监听数据库的变化,当发生变化时,函数被触发,它应该运行 Python 代码.
(此代码不起作用,就像会弹出警报消息,但 python 代码没有运行,否则应该打开 LED.我做错了什么?)>
index.html 文件
函数 runPython(){$.ajax({类型:POST",url: "/home/pi/Desktop/Web/led.py",数据 :{},成功:callbackFunc});}函数 callbackFunc(response){警报(工作");}
led.py 文件
将 RPi.GPIO 导入为 GPIO导入时间mGPIO.setmode(GPIO.BCM)GPIO.setwarnings(False)GPIO.setup(18, GPIO.OUT)打印LED 亮"GPIO.output(18, GPIO.HIGH)时间.睡眠(10)打印LED 关闭"GPIO.output(18,GPIO.LOW)
解决方案
您的代码不起作用,因为您无法直接从浏览器访问和运行服务器上的脚本,您只能使用 ajax
,因此ajax中的url
应该是服务器的url,你必须发送data
.
在您的服务器(即您的 Raspberry Pi)上,您需要有一个 http(web) 服务器.服务器将处理来自您的 javascript 的 post 请求并相应地控制 GPIO.像其他提到的一样,您可以使用 Flask 网络开发框架来创建一个网络服务器来处理请求,或者我经常使用 http.server 这是python标准的一部分库来为像这样的简单应用程序创建我自己的 GET 和 POST 请求处理程序.
这是一种使用 http.server
的方法,其中 do_GET
方法创建一个网页并在将浏览器指向服务器/RPi IP/URL 时运行 javascript,和'do_POST'方法处理ajax发送的post数据来控制GPIO.
web_gpio.py(Python 3 语法)
导入时间将 RPi.GPIO 导入为 GPIO从 http.server 导入 BaseHTTPRequestHandler, HTTPServerhost_name = '192.168.0.115' # 将此更改为您的树莓派 IP 地址主机端口 = 8000类 MyHandler(BaseHTTPRequestHandler):"""用于读取数据的 BaseHTTPRequestHander 的特殊实现从和控制 Raspberry Pi 的 GPIO"""def do_HEAD(self):self.send_response(200)self.send_header('内容类型', 'text/html')self.end_headers()def_redirect(自我,路径):self.send_response(303)self.send_header('内容类型', 'text/html')self.send_header('位置', 路径)self.end_headers()def do_GET(self):html = '''<身体><p>此网页打开,然后在 2 秒后关闭 LED</p><script src="http://code.jquery.com/jquery-1.12.4.min.js"></script><脚本>函数 setLED(){{$.ajax({类型:POST",url: "http://%s:%s",数据:开",成功:功能(响应){警报(LED 触发")}});}}设置LED();