Почему моя кнопка HTML не запускает мой скрипт Python? - PullRequest
0 голосов
/ 23 декабря 2018

Итак, я попытался создать кнопку для своей веб-страницы.Функция кнопки - запустить мой скрипт на Python из Raspberry Pi .Я попытался сделать это, следуя руководству CgiScript .Но в тот момент, когда я нажимаю на кнопку, он показывает мне только сценарий на веб-странице, а не запускает его из Thonny IDLE на Pi.Вот мой HTML код

<!DOCTYPE HTML>
<html>
<head>
<title>Twisted Twister</title>
<link rel="shortcut icon" href="favicon.png">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-Language" content="nl-nl">
<meta http-equiv="Content-Language" content="en-gb">
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1252" >
<style>
body {
 font-family: Arial, Helvetica, sans-serif;
    font-size: 30px;
    color: #FFB0FE
    background url("texture.png")
    }`

#fixed {
    position: fixed;
    top: 0;
    left: 0;
}

#arrowPad {
    border: 10px #FFFFFF;
}

#USERDATA {
    background: 10px #FFFFFF;

}

#USERDATA.h {
    background: 10px #FFFFFF;

}

#USERDATA.h:hover {
    background: 10px #FFFFFF;

}
</style>
<body>
<>
<div id="USERDATA"></div>
<script type="text/javascript" src="jquery-3.3.1.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        setInterval(function () {
            $('#USERDATA').load('RequestUserData.php')
        }, 200);
    })
</table>
</script>

<table>
<div id="PI"></div>
<script type="text/javascript" src="jquery-3.3.1.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        setInterval(function () {
            $('#PI').load('RequestPiData.php')
        }, 200);
    });

</script>
</table>

<div id="fixed">
  <table id="arrowPad">
        <tr>
        <td id="USERDATA" class="h"><a href="/usr/lib/cgi- 
bin/aantalSpelers2.py" ><img src="https://imgflip.com/s/meme/Blank-Nut- 
Button.jpg" width="150" height="150" id="a2" alt="PythonScript"></img></a> 
</td>
</tr>
</table>
</div>
</body>
</html>

А вот мой Python script def main ():

# 0 changes to 1 when players are joining the game
speler_een = 0
speler_twee = 0
speler_drie = 0
speler_vier = 0

# This function makes an inventory of how many players are involved
class HoeveelSpelers:
    def verkrijg_aantal_spelers(spelers_totaal):
        hoeveelSpelers = int(input('Hoeveel spelers spelen er mee? (1-4) '))

        while (hoeveelSpelers > 4 or hoeveelSpelers < 1):
            print('Dit is niet een geldige hoeveelheid spelers. Probeer het 
opnieuw. ')
            hoeveelSpelers = int(input('Hoeveel spelers spelen er mee? (1-4) 
'))

        return hoeveelSpelers

h = HoeveelSpelers()
spelers_totaal = h.verkrijg_aantal_spelers()

if (spelers_totaal == 4):
    speler_een = 1
    speler_twee = 1
    speler_drie = 1
    speler_vier = 1
elif (spelers_totaal == 3):
    speler_een = 1
    speler_twee = 1
    speler_drie = 1
elif (spelers_totaal == 2):
    speler_een = 1
    speler_twee = 1
elif (spelers_totaal == 1):
    speler_een = 1

print(speler_een, speler_twee, speler_drie, speler_vier)

main()

Так что в основном то, что яЧтобы сделать это, нажмите кнопку на веб-странице и запустите скрипт.

1 Ответ

0 голосов
/ 23 декабря 2018

Вызов кода Python из HTML не так прост, как создание гиперссылки на путь к файлу (но также не очень сложный, когда вы понимаете основы).

Чтобы сделать ваш код Python доступным из вашего HTMLстраница, на которой вам нужно запустить соответствующий веб-сервер Python сзади (например, Flask ).

Придерживаясь примера с Flask - если вы хотите иметь кнопку, она запускает определенную функцию (например, foo()) вам необходимо зарегистрировать «конечную точку», которая отображает URL-адрес этой функции (пример взят из здесь ):

backend

from flask import Flask
app = Flask(__name__)

@app.route("/")
def foo():
    pass # define the action here

...

Предполагая, что вы запускаете сервер Flask через порт 5000 на том же хосте, что и внешний интерфейс, кнопка должна ссылаться на что-то вроде

внешний интерфейс

...
<a href="http://localhost:5000/">click here</a>
...

Без возвращаемого значения фактическая обработкапроисходит только в бэкэнде - без вашего ведома.Когда дело доходит до возврата значений (как я полагаю, имеет место в вашем примере), все становится немного сложнее.Я могу только рекомендовать Flask Mega Tutorial (автор Miguel Grinberg) .Он охватывает множество основ, а также довольно продвинутые функции, которые могут помочь вам создать макет нашего приложения.

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...