如果不清楚或类似的话,我道歉。我对任何类型的网络编程都非常陌生,所以请耐心等待。单击链接时,我想运行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)
的test.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>
test.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代码吗?我该怎么做呢?
非常感谢所以,我真的迷失了并坚持下去。
答案 0 :(得分:3)
这里有一些事情需要修复以使事情有效(或者至少我理解你希望它们如何工作)。
如果您要使用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)
不要忘记在顶部导入commands
。虽然,你真的应该使用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
的命令是否有效。这是一个单独的问题,因为无法显示您想要的信息。
现在为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);
}
});
}
希望这足以让你继续前进。