运行 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
我有一个 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