有没有办法将 Python 变量传递给 Javascript 而无需将其写入文件?
Posted
技术标签:
【中文标题】有没有办法将 Python 变量传递给 Javascript 而无需将其写入文件?【英文标题】:Is there a way to pass a Python variable to Javascript without writing it to a file? 【发布时间】:2019-10-30 02:29:00 【问题描述】:假设我有一个简单的 Python 变量,如下所示:
x = 5
我想创建一个网页,该网页使用 javascript 来进一步处理该变量,在同一台计算机(Raspberry Pi)上运行。
<!DOCTYPE html>
<html>
<body>
<script>
document.write(x);
</script>
</body>
</html>
因为 Raspberry Pi 使用 micro SD 卡,所以我想限制读/写周期数。有没有办法将这个 Python 变量存储在 Javascript 代码可以访问的内存中(或其他方式)?
我知道有些人会建议用 Javascript 重写 Python 代码,但我已经有一个大型 Python 程序,由于时间和创建它所涉及的原始工作,我不想重写它。如果你很好奇,我正在使用 Javascript 来显示带有 Highcharts 的数据——这对于我的项目来说是首选。
【问题讨论】:
你在使用任何python框架吗?像 Django 或 Flask... 我同意某些上下文可能有助于更好地解决问题。 不,我对这两个框架都不熟悉。也许是时候学习了。 【参考方案1】:几个想法:
-
在您的 Python 应用程序中运行一个 Web 服务器并公开一个返回该数据的端点。在您的 Javascript 应用程序中,调用此 API(可通过
0.0.0.0
访问)并使用数据。警告:您必须在 Python 应用中设置网络服务器并保持其运行。
这是一个更好的主意:
-
在您的 Pi 上运行 Redis 实例。 Redis 是一个内存缓存提供程序,您可以将其配置为不将任何数据持久化到磁盘。因此,它将成为您的 Python 和 Javascript 应用程序之间的内存代理。 Redis 在您的 Pi 上作为本地 Web 服务器运行,并公开用于写入和读取数据的端点。从您的 Python 应用程序调用 Redis 端点以写入一些数据,并从您的 Javascript 应用程序调用 Redis 以读取您需要的内容。
https://redis.io/topics/ARM
【讨论】:
我喜欢有一个中间选项的方法,它不会直接干扰两个已经存在的部分中的任何一个。虽然我不详细了解redis,但似乎是个不错的选择。【参考方案2】:我想不出实现这一目标的直接方法。但我认为你可以在双方都使用socket-io 并通过它进行通信。
编辑:
正如 S.Pellegrino 所指出的,根据 op 的需求,从问题中所谓的“大型 Python 程序”构建 REST API 可能是一个不错的选择。
【讨论】:
如果它不必是实时的,你可以只公开一个 REST API 来访问你的 python 程序的内部状态(直接从你的 python 脚本内部),然后从你的 js 中查询它。 @S.Pellegrino 是的,您指出这一点很好。根据 op 的需求,在他所谓的“大型 Python 程序”之上构建一个 rest api 也可能是一个很好的解决方案。【参考方案3】:您可以在 URL 中传递变量。
使用 JavaScript,您可以提取 URL 参数。例如,请参阅此回复:https://***.com/a/50769370/2223027
【讨论】:
据我们所知,没有网址。如果有,我认为解析请求不是一个好的选择,除非端点本身有意义,但是从端点获取数据不是操作所要求的。我认为您的回答没有解决问题。 @89f3a1c 页面有document.location
,为什么说没有网址?根据“Is there a way to store this Python variable in memory (or some other way) that can be used by the Javascript code?”,看起来该值可能不会经常更改,因此将其作为 URL 传递可能是选项。如果不是,我同意 Redis 方法更有意义。以上是关于有没有办法将 Python 变量传递给 Javascript 而无需将其写入文件?的主要内容,如果未能解决你的问题,请参考以下文章