-1

首先,我不是以英语为母语的人,所以请原谅我可能有的任何拼写错误。

我正在尝试集成HTMLPython来创建一个可以与总线“对话”的GUI(如果您有兴趣,可以使用 KNX 总线)。

我有一个带有HTML页面和一些Python脚本的树莓派,这些脚本实际上是与总线通信的。我已经设法用一点 PHP(我不是特别精通PHP)从 HTML 运行 python 脚本,做这样的事情:

if (isset($_POST ['button'])){
   exec("sudo pathofpythonscript/pythonscript.py")
}

它工作得很好,当它按下按钮时,它就会执行脚本。但是现在,我想要运行一个脚本(因为我希望 python 从总线上从 UART 读取并显示该信息)并且当脚本中的某些事情发生时(例如,它满足的条件),我想成为能够与 HTML 对话以更改 CSS 属性或其他任何内容,类似于这里的伪代码

//This is just pseudo-code to try to illustrate my question, IT'S NOT working code
//In the python file, a simple toggle function
if bus_event
  var != var

//in Html, with javascript
if (var_from_python_script == true){
document.getElementById('button').style.background=red;
}

如果有人能告诉我如何制作一个简单的示例,例如使用 python 脚本切换输入和返回它的任何布尔参数,以及如何“抓取”从 javascript/HTML 返回以使用它,

我想我可以做其他所有事情。

先感谢您!

4

1 回答 1

0

您混淆了在浏览器中运行的 HTML/CSS/Javascript 代码和在服务器上运行的 (PHP/Python) 代码。即使在您的情况下,它们可能相同,也没关系。python 脚本未在您的浏览器中运行,因此无法更改 html/css 甚至 javascript 的状态。

当您使用 exec 执行代码时,PHP服务器正在运行一个外部命令并期待对即时请求的响应。在那之后,就结束了。

我建议放弃 PHP 并使用 Python Web 应用程序框架。Flask、Django 或其他任何东西。这将允许您直接与 python 代码交互。然后,您的 Web 浏览器可以向您的服务器请求数据并知道发生了什么。请记住,网络通常只是从浏览器到服务器。

现在,如果你需要实时交互,你应该看看 websockets。这些将允许您的浏览器和正在运行的 python 应用程序之间进行双向通信。这项技术有许多注意事项,但它可能更适合您的需求。请注意,这将迫使您在浏览器中编写 Javascript 代码来管理此通信,但这应该不会太难。

于 2018-04-22T20:07:25.733 回答