Ajouter un programme python fonctionnel à de l'HTML

Résolu
Bonjour, j'aimerais savoir comment mettre un programme python dans une page html. Il faudrait que sur la page WEB, on puisse exécuter le programme mis dans cette page.
Merci à tous ceux qui me répondront
Bonne journée à vous

32 réponses

Résumé de la discussion

Mettre un programme Python dans une page HTML et le faire s'exécuter directement depuis cette page repose sur une limitation : le navigateur interprète HTML et JavaScript, pas Python. Des réponses évoquent une voie avec JavaScript et ActiveX pour lancer cmd /c 'python ...', mais cette approche est Windows-only et expose à des risques de sécurité. D'autres insistent sur les défis des chemins et des noms de fichiers, et indiquent que l'exécution Python dans le navigateur n'est pas fiable en dehors d'IE ou sans serveur. En pratique, ces solutions restent limitées, et une approche robuste consiste à exécuter Python côté serveur et à communiquer via HTTP, plutôt que d'essayer une exécution locale directement dans la page.

Bobot (l’IA à votre service)
  1. Contributeur
    bonjour, peux-tu nous en dire plus? que fait ce programme python, où est-il exécuté?
    0
    1. Merci d'avoir répondu, mon programme a pour but d'ouvrir une première fenêtre Tkinter dans laquelle sont disposées plusieurs images cliquables qui rediriges quand l'on clique dessus, vers une 2e fenêtre Tkinter. J'aimerais mettre ce programme dans une page html, en gros, j'aimerais qu'à partir de la page je puisse lancer mon programme.
      Voici mon programme :
      from tkinter import *
      
      def pick_souris(event):
       global img_1
      
      
       for k in range(len(images)):
        x1 = images[k][2][0]
        y1 = images[k][2][1]
        x2 = images[k][2][2] + x1
        y2 = images[k][2][3] + y1
        image_2 = images[k][1]
      
      
        if(event.x >=x1 and event.x <=x2 and event.y >=y1 and event.y <=y2):
         fenetre_2 = Toplevel(fenetre_princ)
      
      
         can2 = Canvas(fenetre_2,bg='white',height=w_height-10,width=w_width-10)
         can2.place(x = 0,y = 0)
         fenetre_2.attributes("-fullscreen", 1)
      
         img_1 = PhotoImage(file=image_2)
         can2.create_image(50,0,anchor = NW, image=img_1)
      
         bou2= Button(fenetre_2, text="Quitter", command= fenetre_2.destroy)
         bou2.pack(side=BOTTOM)
      
      w_width=1600
      w_height = 1200
      
      fenetre_princ = Tk()
      fenetre_princ.attributes("-fullscreen", 1)
      fenetre_princ.title("I Les conséquences de nos actes")
      fenetre_princ.geometry(str(w_width)+'x'+str(w_height))
      
      can = Canvas(fenetre_princ,bg='#101a60',height=w_height-10,width=w_width-10)
      can.place(x = 0,y = 0)
      can.bind("<Button-1>", pick_souris)
      
      #Image initiale: taille = 250x150
      images = {0:('Fresque_01.png','Fresque_02.png',(0,30,250,150)),1:('Fresque_03.png','Fresque_04.png',(640,30,250,150)),
      2:('Fresque_05.png','Fresque_06.png',(0,210,250,150)),3:('Fresque_07.png','Fresque_08.png',(0,390,250,150)),
      4:('Fresque_09.png','Fresque_10.png',(0,750,250,150)),5:('Fresque_11.png','Fresque_12.png',(320,30,250,150)),
      6:('Fresque_13.png','Fresque_14.png',(960,30,250,150)),7:('Fresque_15.png','Fresque_16.png',(400,390,250,150)),
      8:('Fresque_17.png','Fresque_18.png',(0,570,250,150)),9:('Fresque_19.png','Fresque_20.png',(400,210,250,150)),
      10:('Fresque_21.png','Fresque_22.png',(400,750,250,150)),11:('Fresque_23.png','Fresque_24.png',(1280,30,250,150)),
      12:('Fresque_25.png','Fresque_26.png',(1200,390,250,150)),13:('Fresque_27.png','Fresque_28.png',(400,570,250,150)),
      14:('Fresque_29.png','Fresque_30.png',(800,570,250,150)),15:('Fresque_31.png','Fresque_32.png',(1200,750,250,150)),
      16:('Fresque_33.png','Fresque_34.png',(1200,210,250,150)),17:('Fresque_35.png','Fresque_36.png',(800,390,250,150)),
      18:('Fresque_37.png','Fresque_38.png',(800,210,250,150)),19:('Fresque_39.png','Fresque_40.png',(1200,570,250,150)),
      20:('Fresque_41.png','Fresque_42.png',(800,750,250,150))}
      
      img = {}
      for k in range(len(images)):
      	   img[k] = PhotoImage(file=images[k][0])
      	   can.create_image(images[k][2][0], images[k][2][1], anchor = NW, image=img[k])
      
      
      bou1= Button(fenetre_princ, text="Quitter", command= fenetre_princ.destroy)
      bou1.pack(side=BOTTOM)
      fenetre_princ.mainloop()
      


      Merci encore bonne soirée
      0
    2. Contributeur
      @MrLemonIl y a deux ordis impliqués dans l'utilisation d'une page HTML: le client, celui sur lequel tourne le navigateur, et le serveur, celui sur lequel tourne le site.
      Je crois comprendre, en lisant ta réponse, que tu imagines que le programme Python travaille sur l'ordi du client.
      Par contre, je suppose que les images se trouvent sur le serveur.

      Il serait sans doute plus clair que tu décrives ce que tu veux réaliser, avec ou sans Python.
      0
  2. Je ne pensais pas du tout à cela ... Je pensais que pouvais simplement mettre directement le programme dans la page HTML et qu'il s’exécute ... J'aimerais que sur n'importe qu'elle ordi, donc sur un serveur j'imagine, que ce programme se lance à partir d'une page html. Donc il faut que j'ai un serveur sur lequel mettre les images, le programme et la page html ?
    Il faut qu'elle soit accessible à tous ceux qui possède le lien de la page. Sinon si c'est trop compliqué, mettre le programme, les images et la page html sur un ordi pour qu'on puisse avoir la page web uniquement sur cette ordi.
    0
    1. Contributeur
      il me semble que, si tu veux que quelque-chose soit accessible à tous ceux qui possèdent un lien, ce quelque-chose doit se situer quelque part, accessible à tous.
      je ne suis pas certain de comprendre le rôle que tu as donné au programme python dans ce contexte.
      quelle est ta compréhension des interactions entre un navigateur et un site?
      0
  3. Je n'ai pas compris votre question. Je vais tous vous expliquer : Pour le BAC en ISN, j'ai un projet à réalise, je dois réaliser "une fresque du climat" , on dispose d'images et de leur définition. Nous avons choisis que cette "fresque" soit interactive sur une page internet, réaliser en html ou CSS. Pour cela j'ai créé un programme qui permet de montrer des images avec un Tkinter qui sont elles-même cliquables. Et j'aimerais que ce programme soit sur une page internet pour éviter de lancer le programme via Python. Par exemple pour un puzzle, il y a bien un programme derrière et pourtant c'est affiché sur une page WEB. J'espère que j'ai bien tout expliquer et que vous comprenez ma démarche :)
    0
    1. Contributeur
      Il n'est pas possible d'utiliser Tkinter dans ce contexte.
      Quel est le site de puzzle que tu prends comme exemple de ce que tu veux réaliser? As-tu examiné quelle technologie il utilise?
      0
  4. Je prends un cas général, ce que je veux dire c'est que derrière chaque "jeux" se trouve un programme non ? Il utilise quoi dans ce cas là ? Quelque chose d'autre que du python ? Car ces jeux sont sur une page web avec une mise en page ect ... Il est donc possible d'associer un programme et une page WEB non ?
    0
    1. @yg_beMerci c'est bien ce que je me disais
      0
  5. Holà MrLemon,

    C'est important de savoir si tu es en client/serveur ou si tu exécute l'html seulement sur ton ordi. , donc en interne, en local et non pas sur un site web

    Car ce genre de truc peut poser des problèmes de sécurité

    Moi, j'ai trouvé comment faire avec une fonction Javascript appelée dans la page html, cette fonction lance une commande shell qui lance le Python, puisque dans une fenêtre "invite de commandes ", on peut toujours lancer un programme quel qu'il soit:


    mais cela ne fonctionne que sur Internet Explorer, et encore, il donne des avertissements de sécurité avant d'exécuter le code

    Sur les autres browsers, même pas de message et rien ne se passe (ou alors il faut peut-être modifier des options de sécurité)
    0
    1. Je pense que vu la complexité de la chose, il sera plus préférable de faire seulement sur un ordi ça sera déjà pas mal ????
      0
  6. Ou sinon c'est pas grave je vais refaire le programme python en Javascript ça va être plus simple
    0
    1. Le python appelé par html, ça donnerait ça:

      <!doctype html>
       <head>
        <title>Mon programme d'images</title>
        <style type="text/css">
         p {color: #006666; font-family: Verdana; font-size : 16px}
         a:link {text-decoration:none;} 
        </style>
      
        <script language="Javascript">
         function run_python()
         {
          var w = new ActiveXObject("WScript.Shell"); 
          w.run('cmd /c "python C:\\Phil\\Dev\\html\\test.py"'); 
         }
        </script>
       </head>
      
       <body>
        <p>Voici mon superbe programme Python :</p>
        <a href = "javascript:run_python()"><font face = 'Verdana'>    Fresque du climat</font></a>
        <p>Chouette, non ?</p>
       </body>
      </html>
      


      ouvrir avec Internet Explorer uniquement, et évidemment changer le chemin et nom du python:
      C:\\Phil\\Dev.......
      sur la page, cliquer sur le lien 'fresque du climat'
      1
      1. Super merci je test ça !
        0
      2. On est d'accord que pour ça :

        c'est :
        w.run('cmd /c "python Ce PC//C:\\Utilisateurs\\bline\\Bureau\\Lycée\\Fresque du Climat ISN\\Le réchauffement climatique.py"');
        0
      3. Contributeur
        @MrLemonsans
        Ce PC//
        0
      4. @yg_beeffectivement j'ai pas fais gaffe mais rien ne change, juste console qui s'ouvre et se referme ...
        0
      5. Contributeur
        @MrLemonet si tu remplaces /c par /k ?
        0
    2. Bonjour MrLemon,

      1_ pour exécuter un script Python dans l'invite de commandes, il faut faire:

      python "C:\\Utilisateurs\\bline\\Bureau\\Lycée\\Fresque du Climat ISN\\Le réchauffement climatique.py"

      et non pas :

      cmd /k C:\\Utilisateurs\\.............

      cmd invoque l'invite de commandes, or on est déjà dedans !



      2_ pour exécuter le fichier html, j fais ceci:



      Ensuite, j'ai un message sur la page: je clique "autoriser ..."


      Je clique sur le lien Fresque du climat, là un autre message de securite, je clique Oui
      et le Python s'exécute
      0
      1. J'ai déjà fait ça mais rien ne se passe, l'invite de commande s'ouvre et se referme instantanément. J'ai testé sur l'invite de commande directement mais rien ne se passe pourtant j'ai exactement la même chose

        Je fais autoriser :


        Je fais oui :


        Sinon le chemin est bon pour aller jusqu'au programme ?
        C:\\Utilisateurs\\bline\\Bureau\\Lycée\\Fresque du Climat ISN\\Le réchauffement climatique.py

        0
    3. Ok, procédons par étapes, ne parlons pas du html pour le moment …

      Peux-tu me répondre à ces 3 questions précises :

      1_ Ca parait évident, mais me confirmes-tu que lorsque tu double-cliques directement sur ton fichier Le réchauffement climatique.py il s'exécute bien ?
      la fenêtre s'ouvre avec les belles images ?

      2_ C''est basique aussi mais le fichier Le réchauffement climatique.py est bien dans le dossier

      C:\\Utilisateurs\\bline\\Bureau\\Lycée\\Fresque du Climat ISN ?

      3_ Dans l'invite de commandes, tu entre exactement cette ligne? :

      python "C:\\Utilisateurs\\bline\\Bureau\\Lycée\\Fresque du Climat ISN\\Le réchauffement climatique.py"

      au mot près, à l'espace près, au signe près, avec les guillemets " avant le C et après .py ?

      Les guillemets sont obligatoires car tu as des espaces dans le nom du fichier et dans un des répertoires du chemin ...
      0
      1. 1) Quand je double clique ça m'ouvre mon programme mais ça ne se lance pas directement, il faut que j'appuie sur la petite flèche verte (exécuter) pour qu'on voit les images
        2) bien évidemment
        3) Oui exactement cette ligne :
        0
    4. ah nous y voila !

      c'est quoi cette petite flèche verte ?????

      c'est ça qui manque dans la commande dans l'interpréteur et donc quand on lance de l'html

      Moi pour exécuter un Python, je double-clique sur le fichier dans le répertoire et il se lance de suite :




      Pas de flèche verte, donc ça marche directement en invite de commandes et avec html …
      0
      1. Ah oui d'accord je vois, vous quand vous cliquez ça vous lance directement le programme, moi ça m'ouvre le script
        la flèche verte :

        On ne doit pas avoir le même Python
        0
    5. Rien a voir avec Python

      Dans Windows, généralement, quand on double-clique sur un fichier, il l'ouvre avec l'application qui lui est associée, par exemple sur un fichier Excel, Windows l'ouvre avec l'application Excel, sinon, on peut faire clic-droit -> ouvrir avec … pour l'ouvrir avec une autre application
      (ça ne sert à rien, mais si on veut on peut ouvrir un Excel avec Notepad, par exemple …)

      En fait, si tu regardes bien le fichier dans mon répertoire dans ma réponse d'avant, la petite icone qui est devant son nom est l'icone Python, donc quand je double-clique, Windows l'ouvre directement avec l'interpréteur Python, pas avec mon éditeur qui est IDLE

      Pour éditer mes fichiers Python, justement, je fais clic-droit Edit with IDLE …

      Et donc, chez toi, l'appli associée aux fichiers .py est PyScripter qui est ton éditeur Python
      donc quand tu double-clique, Windows ouvre ton .py avec PyScripter

      Conclusion: pour faire fonctionner ma mécanique avec html, il faudrait que tu modifie dans Windows l'association de fichiers .py avec Python plutôt qu'avec ton éditeur, mais ça, c'est à toi de voir ....
      0
      1. ah oui d'accord donc il faut que je télécharge Python, je connaissais que EduPython c'est pour ça.
        C'est bon dès que je double-clique dessus il se lance directement mais cela ne change rien avec la page html ... Pourtant j'ai mis Python par défaut
        0
      2. Contributeur
        je ne pense pas que l'association de fichiers soit en cause, comme il fait:
        python "C:\\Utilisateurs\\bline\\Bureau\\Lycée\\Fresque du Climat ISN\\Le réchauffement climatique.py"
        0
    6. Je ne te suis plus, là

      Il ne faut pas que tu télécharge Python, tu l'as déjà !

      Et quand tu double-clique, maintenant, ça l'exécute ?

      Tu as fait quoi ?
      0
      1. Je n'avais pas Python, j'avais seulement EduPython.
        Je viens de télécharger Python et je l'ai mis en application par défaut pour les fichiers .py
        Quand je double clic sur "Le réchauffement climatique" ça me le lance directement donc ce qu'on voulait
        0
    7. et donc quand tu lance la fameuse commande

      python "C:\\ ...................." dans l'interpréteur de commandes, ca donne quoi ?
      0
      1. Je fais entrer mais rien ne se passe
        0
        1. Pas même un message d'erreur dans la fenêtre ?
          tu fait entrer et ca ré affiche le prompt C:\users\Bline> ?

          As-tu bien le chemin vers l'Install Python dans le PATH Windows ?

          0
          1. Oui voilà ça le ré-affiche
            Et non je n'ai pas Python dans le path Windows
            0
            1. Bizarre

              Car python n'étant pas dans le path, la commande python est donc inconnue et tu devrais avoir un message d'erreur :
              'python' n'est pas reconnu en tant que commande interne, ...............
              0
              1. Je sais pourquoi!
                0
              2. J'ai réussis à mettre python dans Path, maintenant le problème c'est qu'il n'arrive pas à ouvrir le programme



                C'est peut être car il n'accepte pas les "é" ?
                0
            2. Il faut faire qqc pour qu'il soit dans le Path ?
              0
              1. oui il n'aime pas les caractères accentués : renomme tout ça et ca va aller !

                moi, en général, dans les noms de fichiers et de dossiers, je ne mets jamais de caractères exotiques, ni d'espaces:

                C:\\Utilisateurs\\bline\\Bureau\\Lycee\\Fresque_du_Climat\\ISN\\le_rechauffement_climatique.py
                0
                1. Incroyable rien ne change, il met toujours qu'il ne trouve pas le fichier pourtant on est d'accord que le chemin est bon ?



                  0
                2. Contributeur
                  @MrLemonmoi j'essaierais sans doubler les contre-oblique.
                  0
                3. @yg_beles slashs à l'envers c'est ça ?
                  0
                4. @yg_berien ne change
                  0
                5. Contributeur
                  @MrLemones-tu certain que le fichier est dans ce dossier?
                  0
              2. Contributeur
                Bonsoir à tous,

                moi j'essaierais sans doubler les contre-oblique.


                J'y avais pensé mais n'ai pas osé interférer et à mon avis, c'est la bonne écriture. Par contre, j'ai aussi relevé que dans certains cas le fichier est nommé le_rechauffement_climatique et dans d'autre le rechauffement climatique, sans underscore donc, ça pourrait expliquer qu'il ne soit pas trouvé?

                Cordialement
                0
                1. Non c'est bon j'ai bien vérifié tout est ok, les underscores sont là, je ne vois vraiment pas pourquoi il ne le trouve pas
                  Merci de votre aide quand même
                  0
                2. Contributeur
                  @MrLemonSans vouloir insister, sommes-nous d'accord sur l'écriture:

                  C:\\Utilisateurs\bline\Bureau\Lycee\Fresque_du_Climat\ISN\le_rechauffement_climatique.py

                  Je pense comme yg_be que c'est le chemin d'accès qui pose problème, si tant est que le double-clic sur le fichier lance l'interpréteur python.

                  Bonne soirée
                  0
                3. @georges97Il y a pas de soucis je prends toutes les hypothèses, et non ce n'est pas ça c'est :
                  C:\\Utilisateurs\bline\\Bureau\Lycee\\Fresque_du_Climat_ISN\Le_rechauffement_climatique.py
                  Et oui c'est juste ça
                  Merci bonne soirée à vous
                  0
                4. Contributeur
                  @MrLemonMeLemon,

                  Si l'"hypothèse" de yb_be (et la mienne) est exacte, il faut remplacer les doubles slashes inversés \\Bureau\Lycee\\ par de simples slashes inversés.

                  Il me semble que si votre graphie ne fonctionne pas, c'est qu'il peut y avoir un problème dans le chemin que vous utilisez, non?

                  Faîtes le test dans la fenêtre de saisie de l'explorateur de fichiers pour ouvrir Le_rechauffement_climatique.py
                  0
              • 1
              • 2