You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下无需REST框架,原生JS与Python实现版本信息动态获取问询

实现方案:原生JS + Python CGI 动态获取版本信息

Absolutely! You can pull this off with vanilla JavaScript and Python CGI—no heavy frameworks like Flask or Django required, which fits perfectly with your goal of keeping things lightweight. Here's a straightforward, step-by-step breakdown to make it work:

1. 编写Python CGI脚本

首先,创建一个CGI脚本(比如get_version.py),放在你的web服务器的CGI目录下(比如Apache默认的/var/www/cgi-bin/)。这个脚本会读取/proc目录下的目标文件,返回结构化的JSON数据供前端调用。

#!/usr/bin/env python3
import json
import os

# 必须先输出CGI响应头部,空行分隔头部与内容
print("Content-Type: application/json")
print()

def fetch_version_details():
    version_data = {}
    try:
        # 示例:读取/proc/version获取内核版本,可替换为你需要的文件
        with open('/proc/version', 'r') as f:
            version_data["kernel_version"] = f.read().strip()
        
        # 可添加更多/proc文件的读取逻辑
        # 比如读取自定义版本文件:
        # with open('/proc/your-app-version', 'r') as f:
        #     version_data["app_version"] = f.read().strip()
    except Exception as e:
        version_data["error"] = f"Failed to read version info: {str(e)}"
    return version_data

# 输出JSON格式的结果
print(json.dumps(fetch_version_details()))

设置脚本的可执行权限:

chmod +x /var/www/cgi-bin/get_version.py

注意:确保你的web服务器允许执行CGI脚本。比如Apache需要启用mod_cgi模块,并配置ScriptAlias指向CGI目录;Nginx则需要设置CGI处理器(如cgi_pass)。你提到脚本已有sudo权限,读取/proc文件不会有问题,但要注意脚本的所有者和权限范围,避免安全风险。

2. 静态HTML页面的原生JavaScript

在你的静态HTML页面中,使用原生JS的fetch API(现代浏览器支持,兼容旧浏览器可改用XMLHttpRequest)调用CGI脚本,获取版本信息并动态填充到页面中。

<!DOCTYPE html>
<html>
<head>
    <title>System Version Info</title>
</head>
<body>
    <h1>System Version Information</h1>
    <div id="version-content">
        Loading version info...
    </div>

    <script>
        // 页面加载完成后发起请求
        document.addEventListener('DOMContentLoaded', function() {
            const contentContainer = document.getElementById('version-content');
            
            // 调用CGI脚本接口
            fetch('/cgi-bin/get_version.py')
                .then(response => {
                    if (!response.ok) {
                        throw new Error(`Request failed! Status: ${response.status}`);
                    }
                    return response.json();
                })
                .then(data => {
                    // 渲染版本信息到页面
                    let renderHtml = '';
                    if (data.error) {
                        renderHtml = `<p style="color: #dc3545;">${data.error}</p>`;
                    } else {
                        for (const [key, value] of Object.entries(data)) {
                            const displayKey = key.replace('_', ' ').toUpperCase();
                            renderHtml += `<p><strong>${displayKey}:</strong> ${value}</p>`;
                        }
                    }
                    contentContainer.innerHTML = renderHtml;
                })
                .catch(error => {
                    contentContainer.innerHTML = `<p style="color: #dc3545;">Failed to load version info: ${error.message}</p>`;
                });
        });
    </script>
</body>
</html>

关键注意事项

  • CGI配置验证:确认web服务器正确开启CGI支持,比如Apache的ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"和Options +ExecCGI配置,Nginx需对应设置CGI处理规则。
  • 数据格式:用JSON返回数据让前端更易解析处理,比纯文本更具可维护性。
  • 错误处理:在Python脚本和JS中都加入错误捕获逻辑,确保页面在请求失败时给出友好提示。
  • 安全考量:即使脚本有sudo权限,也要最小化权限范围,避免脚本被滥用;同时严格控制CGI目录的访问权限,防止未授权调用。

内容的提问来源于stack exchange,提问作者Darin Beaudreau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:28:50