在 javascript 中使用 python 输出
Posted
技术标签:
【中文标题】在 javascript 中使用 python 输出【英文标题】:Using a python output in javascript 【发布时间】:2021-04-13 06:22:06 【问题描述】:我们想将一个布尔值从 python 发送到 javascript,以便我们可以在我们的 html 网站中使用它。
我们尝试使用套接字,但这对我们来说太复杂了。我们的下一个想法是使用 api,我们知道如何使用 javascript 从 api 获取信息。我们要做的是将python布尔值发布到api,然后使用javascript从api中获取布尔值。 但我们不知道该怎么做。
我们的所有代码都使用树莓派和一个硬件按钮,按下时在 python 中返回 true。
我们目前正在测试从https://healeycodes.com/javascript/python/beginners/webdev/2019/04/11/talking-between-languages.html 找到的代码
但是这段代码对我们不起作用。 我们也在使用pycharm作为我们的工作空间,这是一个问题吗?
我们当前的javascript代码:
const request = new XMLHttpRequest();
request.open("GET", url, true);
request.onreadystatechange = function()
if (request.readyState === 4 && request.status === 200)
success(JSON.parse(request.responseText));
;
request.send();
setInterval(get("button-status.json", receiveStatus), 3000);
function receiveStatus(response)
if (response.status !== status) // only do something if status has changed
status = response.status;
console.log('button status is now', status);
let status;
// checks every 100ms
get()
我们用于测试的 Python 代码:
import random
import json
import time
button_status = False
path = (r"C:\Users\Sam\Desktop\pythonProject\pythonflask\emplates") # replace with your actual path
def save_button_status():
with open(path + "/button-status.json", "w") as f:
json.dump('status': button_status, f)
while True :
value = random.randrange(1, 10)
if ( value <= 5) :
button_status = True
save_button_status()
time.sleep(3)
else :
button_status = False
save_button_status()
time.sleep(3)
print(button_status)
【问题讨论】:
'我们尝试使用套接字,但那太复杂了'为什么?这也是正在运行的python程序中的布尔值还是只是运行的输出? 这太复杂了,因为是编程新手,不知道从哪里开始。这个布尔值只是一个正在运行的 python 脚本的输出。 nodejs,像大多数语言一样有一个facility for running and capturing the output of a shell command...就像一个调用你的python脚本。 child_process 确实是一个 node.js 模块,在 node.js 控制台中工作,不能在作为网页一部分并通过浏览器访问的 javascript 中使用。 检查您发布的新代码 - 似乎有些行被复制到错误的地方? 【参考方案1】:您可以尝试设置 SQL 数据库。用 Python 编写一条 SQL 语句来接收您的布尔值。之后在您的 Web 服务器上创建一个 php 脚本来接收 SQL 数据。然后使用 XHTTP JavaScript 请求向 PHP 脚本的 URL 发送请求。
【讨论】:
【参考方案2】:网页中的 Javascript 无法直接在您的计算机上运行 Python 脚本或从本地终端读取信息。您可以做的是让您的 Python 程序将一个小的 json 文件输出到您的 localhost 文件夹,当按下或释放按钮时,该文件会被覆盖,如下所示:
import json
button_status = False # assuming it is initially off
path = "path/to/your/localhost/folder" # replace with your actual path
def save_button_status():
with open(path + "/button-status.json", "w") as f:
json.dump('status': button_status, f)
# Then call save_button_status() whenever the status changes
然后在你的 javascript 中,设置一个间隔来定期调用一个函数来获取这个 json 文件,如果它发生了变化,它会根据值做一些事情:
function get(url, success)
//--- Get JSON data at the given URL and call `success` if successful
const request = new XMLHttpRequest();
request.open("GET", url, true);
request.onreadystatechange = function()
if (request.readyState === 4 && request.status === 200)
success(JSON.parse(request.responseText));
;
request.send();
function receiveStatus(response)
if (response.status !== status) // only do something if status has changed
status = response.status;
console.log('button status is now', status);
let status;
let interval = setInterval(() => get("button-status.json", receiveStatus), 100); // checks every 100ms
当您的本地服务器更新文件时,可能会有一些延迟。
【讨论】:
感谢您的帮助@Stuart。这段代码看起来很有希望,但我们让它工作的唯一方法就是我在我原来的问题上编辑了它。因为我无法在评论中发布我的代码,因为它的字符太多。问题是它会产生很多滞后并且无法始终如一地工作。你知道我们做错了什么吗?以上是关于在 javascript 中使用 python 输出的主要内容,如果未能解决你的问题,请参考以下文章
Python实现简单的用户登录信息确认,密码输错3次后,用户被锁定