在JavaScript中使用Python的输出

20 浏览
0 Comments

在JavaScript中使用Python的输出

我们想要将一个布尔值从Python发送到JavaScript,以便在我们的HTML网站中使用它。

我们尝试使用套接字,但对我们来说太复杂了。我们接下来的想法是使用一个API,并且我们知道如何使用JavaScript从API获取信息。我们想要做的是将一个Python布尔值发布到API,然后使用JavaScript从API获取布尔值。

但我们不知道如何做到这一点。

我们在所有代码中都使用树莓派和一个硬件按钮,当按下时返回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")  # 替换为您的实际路径
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)

0
0 Comments

使用Python输出的问题是,当我们想要在JavaScript中使用Python的输出时,需要找到一种方法来将Python的输出传递给JavaScript。

为了解决这个问题,我们可以按照以下步骤进行操作:

1. 首先,我们可以尝试设置一个SQL数据库,用于存储Python的输出。我们可以使用Python编写一个SQL语句来接收布尔值。

import sqlite3
def get_boolean():
    # 连接到数据库
    conn = sqlite3.connect('database.db')
    c = conn.cursor()
    # 执行SQL查询语句
    c.execute("SELECT boolean_value FROM table_name")
    # 获取结果
    result = c.fetchone()[0]
    # 关闭数据库连接
    conn.close()
    return result

2. 接下来,我们可以在Web服务器上编写一个PHP脚本,用于接收SQL数据库中的数据。

connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
// 执行SQL查询语句
$sql = "SELECT boolean_value FROM table_name";
$result = $conn->query($sql);
// 获取结果
$row = $result->fetch_assoc();
$result = $row["boolean_value"];
// 关闭数据库连接
$conn->close();
// 将结果发送回JavaScript
echo json_encode($result);
?>

3. 最后,我们可以使用XMLHttpRequest(XHR)对象在JavaScript中向PHP脚本的URL发送请求,并接收返回的结果。

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var response = JSON.parse(xhr.responseText);
        // 在JavaScript中使用Python的输出
        console.log(response);
    }
};
xhr.open("GET", "path_to_php_script.php", true);
xhr.send();

通过按照以上步骤操作,我们可以将Python的输出传递给JavaScript,并在JavaScript中使用它。

0
0 Comments

问题的出现原因是Javascript不能直接在网页中运行Python脚本,也不能从本地终端读取信息。解决方法是让Python程序将一个小的json文件输出到本地主机文件夹,当按钮按下或释放时覆盖该文件。然后在Javascript中设置一个定时器,定期调用一个函数来获取这个json文件,并根据值的变化执行相应的操作。可能会由于本地服务器更新文件而导致一些延迟。

以下是解决方法的完整代码:

Python代码:

import json
button_status = False   # 假设初始状态为关
path = "path/to/your/localhost/folder"  # 替换为实际路径
def save_button_status():
    with open(path + "/button-status.json", "w") as f:
        json.dump({'status': button_status}, f)
# 当状态改变时调用save_button_status()

Javascript代码:

function get(url, success) {
    //--- 获取给定URL的JSON数据,如果成功则调用success函数
    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) {  // 只有当状态改变时才执行操作
        status = response.status;
        console.log('button status is now', status);
    }
}
let status;
let interval = setInterval(() => get("button-status.json", receiveStatus), 100); // 每100毫秒检查一次

但是,这种方法可能会导致一些延迟,并且不一定始终有效。如果有任何问题,请提供更多细节以便进一步帮助。

0