在 javascript 中使用 python 输出

Using a python output in javascript

我们想将布尔值从 python 发送到 javascript,以便我们可以在我们的 html 网站中使用它。

我们尝试使用套接字,但这对我们来说太复杂了。我们的下一个想法是使用 api 并且我们知道如何使用 javascript 从 api 获取信息。我们要做的是 post 一个 python 布尔值到一个 api,然后使用 javascript 从 api 得到布尔值。 但是我们不知道该怎么做。

我们对所有代码使用 raspberry pi 和硬件按钮,按下时 returns 在 python 中为真。

我们目前正在测试从 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)

您可以尝试建立一个SQL数据库。在 Python 中写一个 SQL 语句来接收你的布尔值。之后在您的 Web 服务器上创建一个 PHP 脚本来接收 SQL 数据。然后使用 XHTTP JavasScript 请求向 PHP 脚本的 URL 发送请求。

网页中的

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

您的本地服务器更新文件时可能会有一些延迟。