gpt4 book ai didi

javascript - 执行python脚本——Ajax和Flask

转载 作者:行者123 更新时间:2023-11-28 18:33:21 26 4
gpt4 key购买 nike

如果不清楚或类似的情况,我深表歉意。我对任何类型的网络编程都非常陌生,所以请耐心等待。单击链接时,我想运行 python 脚本,然后显示结果。目前发生的情况是它只是返回 HTML 页面。我知道原因,但不知道如何解决。我相信问题出在 Flask python 代码上,但请提供任何意见。我将评论我认为有问题的区域

Flask(Python)代码:

from flask import Flask, render_template
app = Flask(__name__)



@app.route("/")
def index():
return "Hello, world!"

@app.route('/cgi-bin/cputemp.py', methods=['GET', 'POST'])
#this is where need to put something, but I don't know what.
#Without defining this route I was getting a 405 error. I have no idea
#what would go here -- this is just the directory to the python and I
#thought the routes were for different web pages the user could access.
#Again, I believe *this* is the source of the problem. Obviously
#right now it's just returning the HTML of the following test() function.


@app.route('/test', methods=['GET', 'POST'])
def test():
return render_template("test.html")

if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)

测试.html

<!DOCTYPE html>

<html>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

<script src="/static/test.js"></script>
<div id="swiss"><a href="javascript:cputemp2()">Click to display CPU Temp</a></div>

</html>

测试.js

function cputemp2()
{
$.ajax(
{
type: "POST",
url: "cgi-bin/cputemp.py",
dataType: "html",
success: function(msg)
{
console.log(msg); # It's just returning the HTML of test.html currently
document.getElementById('swiss').innerHTML = msg;
},
});
}

cputemp.py

#!/usr/bin/python
import cgi;
import cgitb;
import time
cgitb.enable()
import commands
import sys
import string
print "Content-type: text/html\n\n";
mytemp1 = commands.getoutput('/opt/vc/bin/vcgencmd measure_temp | cut -d "=" -f2 | cut -f1')
output = "Pi CPU Temp is: " + mytemp1
print output

我的问题是——我认为 test.js 文件中的 AJAX 代码将处理对 python 脚本的调用。它所做的只是在我的 Flask 代码中执行到该目录的路由下面的方法。那么我需要在那里运行 python 代码吗?我该怎么做呢?

非常感谢你,我真的迷失了方向,陷入了困境。

最佳答案

这里有一些事情需要修复才能让事情正常工作(或者至少我理解你希望它们正常工作)。

如果您要使用 Flask,则不需要指向 Python 脚本的路由。您可以路由到诸如 /cputemp 之类的内容,然后运行一个函数,该函数返回带有我认为您想要显示的 CPU 温度的 HTML 片段。

@app.route('/cputemp', methods=['GET', 'POST'])
def cputemp():
mytemp1 = commands.getoutput('/opt/vc/bin/vcgencmd measure_temp | cut -d "=" -f2 | cut -f1')
return render_template("cputemp.html", temp=mytemp1)

不要忘记在顶部导入命令。尽管如此,您确实应该使用 subprocess 来代替。 https://docs.python.org/2/library/commands.html

那里的返回使用 Flask 模板来创建 AJAX 请求成功时要插入的 HTML 片段。 http://flask.pocoo.org/docs/0.11/quickstart/#rendering-templates

例如,cputemp.html 可以简单地类似于:

<p>Pi CPU Temp is: {{ temp }}</p>

请注意,我不知道分配给 mytemp1 的命令是否有效。这是一个与无法显示所需信息不同的问题。 p>

现在是 AJAX 部分。我添加了一个错误处理程序来帮助调试进一步的问题。请注意,我更改了 URL 以匹配路由。另外,使用 innerHTML 存在安全问题,您不必担心清理 innerHTML 设置的内容,而是使用 jQuery 的 html 函数。 http://api.jquery.com/html/

function cputemp2() {
$.ajax({
type: "POST",
url: "/cputemp",
dataType: "html",
success: function(msg) {
console.log(msg);
$("#swiss").html(msg);
},
error: function (xhr, status, error) {
console.log(error);
}
});
}

希望这足以让您继续前进。

关于javascript - 执行python脚本——Ajax和Flask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37557814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com