我正在对需要从 /proc 下的某些文件检索信息的页面进行一些更改,以便该页面可以向用户显示版本信息。目前,该页面完全由 Python 脚本生成,这使我可以在创建时读取文件并将所有内容放入页面中。
然而,这导致了当上传新版本软件时版本号不会更新的问题。我不想每次安装新包时都重新生成页面,所以我将主页设置为静态,而只想从 Python 脚本中查询信息并将其返回到页面以在加载时填充页面。
Python 脚本设置为 CGI 并具有 sudo 访问权限,因此它们检索这些文件没有问题。但是,如果我想使用 AJAX 之类的东西来调用 Python 脚本,有什么方法可以在不使用 Flask 或 Django 等 REST 框架的情况下返回数据?应用程序需要轻量级,最好不依赖于新框架。
有没有一种方法可以使用 vanilla JavaScript 和 Python 做到这一点?
最佳答案
好的,所以解决方案相当简单,我只是犯了一些语法错误,导致我在前几次尝试时无法正常工作。
所以请求看起来像这样:
window.onload = function() {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if((this.readyState == 4) && (this.status == 200)) {
var response = JSON.parse(this.responseText);
// Do stuff with the JSON here...
}
};
xhr.open("GET", scriptURL, true);
xhr.send();
}
从那里开始,Python 脚本只需要执行如下操作即可返回包含我的版本号的 JSON 数据:
import sys, cgi, json
result = {}
result['success'] = True
result['message'] = "The command completed successfully"
d = {}
... write version information to the 'd' map ...
result['data'] = d
sys.stdout.write("Content-Type: text/plain\n\n")
sys.stdout.write(json.dumps(result))
sys.stdout.write("\n")
sys.stdout.close()
我花了很长时间才找到的最持久的问题是我忘记了我的脚本标记中的结束引号,这导致整个页面无法加载。
关于没有 REST 框架的 Linux 中的 JavaScript/Python 交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55904866/