运行 python 脚本并在网站上显示打印值

Run python script and display printed value on a website

我有一个 Python 脚本,它打印从与我的 PC 连接在同一网络上的 PLC 发送的当前值。

#!/usr/bin/python
#fetchVar.py argument-with-plc-variable-name
#some script to connect to PLC and fetch
#current value of variable sent as argument
print plcVar

该脚本有效 - 这意味着每次我 运行 这个脚本都会打印出我想要的变量的更新值。示例:

python fetchVar.py aiTemperature

15

也就是说,名为“aiTemperature”的变量在PLC中的当前值为15。 我正在尝试在 HTML 页面中显示打印的温度,这是我目前得到的结果:

<body onload="varupdate()">
    <script language="JavaScript">
        var int=self.setInterval("varupdate()",2000); // update Temperature every two seconds
        
        function varupdate() {
            // somehow run "python fetchVar.py aiTemperature"
            var x = ????;       //The printed value from getVar.py should be saved here
            document.getElementById("var1").innerHTML="Current Temperature = " + x;
        }
    </script>
    <div id="var1"></div>
</body>

有什么办法可以实现吗?

一个想法是使用 JavaScript 文件中的 HTTP request handler. Then you would have to send a request in ajax 让您的 python 脚本回答获取请求以获得您想要的值。

这可能需要一些工作,但它有很好的文档记录,您应该从中学到很多东西。

首先,您需要启用您的服务器运行 .py 文件(关键字:cgi-bin),然后将您的.py 文件上传到您的cgi-bin 文件夹(提示Windows 用户:使用 "Linux/Unix Format" 保存所有文件 - 在 npp 上转到 Edit/EOL Conversion/Linux 格式)。

在 HTML 我有:

<head>
<script src="jquery-2.0.3.js"></script>
<script>
    $(function ReadTemperature() {
        $.ajax({
            url: "http://my-server/cgi-bin/fetchVar.py",
            type: "post",
            datatype: "html",
            data: {
                webArguments: "aiTemperature" //Arguments you want to send to your .py
            },
            success: function(response){
                    $("#aiTemperature").html(response);
            },
            complete: function() {
                setTimeout(ReadTemperature, 2000);   //Refresh value every 2 seconds
            }
        });
    });
</script>
</head>
<body>
    <p>Current temperature: <div id="aiTemperature"></div> °C.</p>
</body>

在 Python 文件中,您需要将 "webArguments" 的寻址添加到 "Python Arguments"...在我的例子中,我必须将以下内容添加到我的 "normal" 脚本:

import cgi, cgitb
print "Content-type: text/html\n\n"    #for showing print on HTML
data = cgi.FieldStorage()
argument = data["webArguments"].value    #argument = name of PLC i need to fetch
#some script for connecting to PLC and reading current value of 
#variable  with name "argument", in this example "aiTemperature"
print plcVar