在JavaScript中使用Python的输出
在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)
使用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中使用它。
问题的出现原因是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毫秒检查一次
但是,这种方法可能会导致一些延迟,并且不一定始终有效。如果有任何问题,请提供更多细节以便进一步帮助。