在 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次后,用户被锁定

Python不同电脑之间传输文件实现类似scp功能不输密码

Java表单中关于JavaScript的非空必输验证,你的程序和大牛有多少差距╮( ̄▽ ̄")╭

Python 制作 gif 生成工具,斗图再也不会输啦

selenium中javascript调试

JavaScript 学习笔记