IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Comment exécuter un script Python sur une page web ? [Python 3.X]


Sujet :

Réseau/Web Python

  1. #1
    Futur Membre du Club Avatar de delandam
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Comment exécuter un script Python sur une page web ?
    Bonjour,

    Je cherche à exécuter (de la meme manière qu'un Run sur IDLE) un script Python placé dans un fichier TicTacToe.py, sur une page Web ttt.html.

    J'ai tenté de mettre une balise Object dans mon Html, de la meme manière que pour un Applet Java. Ca ne marche pas (alors qu'avec un applet Java, ca marche).

    J'ai regardé le tuto suivant : http://python.developpez.com/cours/T...=page_19#L17.2

    Sur le CGI, seulement il y a des balises HTML dans le fichier Python, ce qui n'est pas mon cas.

    Enfin, sur une autre discussion http://www.developpez.net/forums/d15...hon-page-html/ , il est indiqué d'utiliser un interpréteur Python coté client, qu'il faut malheureusement pour chacun des utilisateurs télécharger. Or, je préférerai, de loin, faire comme avec la bibliothèque JQuery
    (
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
    ),
    insérer des lignes de code faisant appel à un interpréteur en ligne qui va se charger de lire le script Python.

    Si quelqu'un peut m'aiguiller car malheureusement, en BTS SIO, on apprend à faire des programmes en Python, on apprend à faire des sites web mais on n'apprend pas à intégrer le programme Python au site web (quel en est l’Intérêt alors ?).

    Code html :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <html>
    <head>
    <meta charset="utf-8" />
    <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
    <link href="../style.css" rel="stylesheet" />
    <title>Tic Tac Toe</title>
    </head>
    <body>
    <div id="head" class="head">
    <p id="ttt_title" class="title">Tic Tac Toe</p>
    </div>
    <div id="projet_content">
     
    </div>
    <div id="pied_projets">
    <a href="../projets.html" title="accueil projets"><img id="home" src="../jpg/home.png" /></a>
    </div>
    </body>
    </html>

    Code Python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    import random
    def drawBoard(board):
        # Impression du tableau
        # "board" est un ensemble de 10 chaines de caractères (ignorant index 0)
        print('   |   |')
        print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9])
        print('   |   |')
        print('-----------')
        print('   |   |')
        print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6])
        print('   |   |')
        print('-----------')
        print('   |   |')
        print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3])
        print('   |   |')
     
    def inputPlayerLetter():
        # Permets à l'utilisateur de choisir sa lettre
        # Retourne une collection avec pour premier élément la lettre choisie par l'utilisateur
        letter = ''
        while not (letter == 'X' or letter == 'O'):
            print('Voulez-vous etre X ou O?')
            letter = input().upper()
     
        if letter == 'X':
            return ['X', 'O']
        else:
            return ['O', 'X']
     
    def whoGoesFirst():
        # Arbitrairement, choisis le joueur qui commence.
        if random.randint(0, 1) == 0:
            return 'ordinateur'
        else:
            return 'joueur'
     
    def playAgain():
        # Cette fonction retourne vrai si le joueur veut retenter sa chance.
        print('Voulez-vous recommencer? (oui ou non)')
        return input().lower().startswith('oui')
     
    def makeMove(board, letter, move):
        board[move] = letter
     
    def isWinner(bo, le):
        # Ayant pour paramètres un tableau nommé "bo" et une lettre nommée "le" (X/O), la fonction retourne vrai si le joueur a gagné.
     
        return ((bo[7] == le and bo[8] == le and bo[9] == le) or # ligne du haut
        (bo[4] == le and bo[5] == le and bo[6] == le) or # ligne du milieu
        (bo[1] == le and bo[2] == le and bo[3] == le) or # ligne du bas
        (bo[7] == le and bo[4] == le and bo[1] == le) or # ligne de gauche
        (bo[8] == le and bo[5] == le and bo[2] == le) or # ligne centrale
        (bo[9] == le and bo[6] == le and bo[3] == le) or # ligne de droite
        (bo[7] == le and bo[5] == le and bo[3] == le) or # diagonale de gauche à droite
        (bo[9] == le and bo[5] == le and bo[1] == le)) # diagonale de droite à gauche
     
    def getBoardCopy(board):
        # crée puis retoune la copie du tableau (passage de "à vide" à "complet"), mise à jour du tableau en somme.
        dupeBoard = []
     
        for i in board:
            dupeBoard.append(i)
     
        return dupeBoard
     
    def isSpaceFree(board, move):
        # retourne vrai si le mouvement passé est libre sur le tableau.
        return board[move] == ' '
     
    def getPlayerMove(board):
        # Le joueur tape la case qu'il veut jouer.
        move = ' '
        while move not in '1 2 3 4 5 6 7 8 9'.split() or not isSpaceFree(board, int(move)):
            print('Quel coup voulez-vous jouer ? (tappez un chiffre entre 1 et 9)')
            move = input()
        return int(move)
     
    def chooseRandomMoveFromList(board, movesList):
        # Retourne un mouvement valide à partir du tableau mis à jour, issu du dernier coup, à défaut retourne "None-aucun".
     
        possibleMoves = []
        for i in movesList:
            if isSpaceFree(board, i):
                possibleMoves.append(i)
     
        if len(possibleMoves) != 0:
            return random.choice(possibleMoves)
        else:
            return None
     
    def getComputerMove(board, computerLetter):
        # Ayant pour paramètres le tableau et la lettre attribuée à l'ordinateur, l'algorithme choisit un coup à jouer.
        if computerLetter == 'X':
            playerLetter = 'O'
        else:
            playerLetter = 'X'
     
        # Algorithme:
        # Dans un premier temps, l'application vérifie si l'ordinateur ne peut pas gagner avec le prochain coup
        for i in range(1, 10):
            copy = getBoardCopy(board)
            if isSpaceFree(copy, i):
                makeMove(copy, computerLetter, i)
                if isWinner(copy, computerLetter):
                    return i
     
        # Dans un deuxième temps (en cas d'impossibilité du premier), l'application vérifie si le joueur humain peut gagner avec le prochain coup et bloque ce coup en le jouant à sa place.
        for i in range(1, 10):
            copy = getBoardCopy(board)
            if isSpaceFree(copy, i):
                makeMove(copy, playerLetter, i)
                if isWinner(copy, playerLetter):
                    return i
     
        # Puis, il y a un choix effectué pour l'ordinateur de manière prioritaire:
        # Si l'un des coins du tableau est libre, l'ordinateur joue un coup sur l'un des coins.
        move = chooseRandomMoveFromList(board, [1, 3, 7, 9])
        if move != None:
            return move
     
        # Si le centre du tableau est libre, l'ordinateur le joue.
        if isSpaceFree(board, 5):
            return 5
     
        # Enfin, l'ordinateur joue l'une des autres cases libres.
        return chooseRandomMoveFromList(board, [2, 4, 6, 8])
     
    def isBoardFull(board):
        # Retourne vrai si toutes les cases du tableau sont remplies.
        for i in range(1, 10):
            if isSpaceFree(board, i):
                return False
        return True
     
     
    print('Tic Tac Toe!')
     
    while True:
        # Réinitialisation du tableau
        theBoard = [' '] * 10
        playerLetter, computerLetter = inputPlayerLetter()
        turn = whoGoesFirst()
        print('Le ' + turn + ' commence.')
        print('Les nombres associés aux cases vont de bas en haut et de gauche à droite')
        gameIsPlaying = True
     
        while gameIsPlaying:
            if turn == 'joueur':
                # Tour du joueur.
                drawBoard(theBoard)
                move = getPlayerMove(theBoard)
                makeMove(theBoard, playerLetter, move)
     
                if isWinner(theBoard, playerLetter):
                    drawBoard(theBoard)
                    print('Bravo! Vous avez gagné!')
                    gameIsPlaying = False
                else:
                    if isBoardFull(theBoard):
                        drawBoard(theBoard)
                        print('Pas de solution!')
                        break
                    else:
                        turn = 'ordinateur'
     
            else:
                # Tour de l'ordinateur.
                move = getComputerMove(theBoard, computerLetter)
                makeMove(theBoard, computerLetter, move)
     
                if isWinner(theBoard, computerLetter):
                    drawBoard(theBoard)
                    print('Vous avez perdu.')
                    gameIsPlaying = False
                else:
                    if isBoardFull(theBoard):
                        drawBoard(theBoard)
                        print('Pas de solution!')
                        break
                    else:
                        turn = 'joueur'
     
        if not playAgain():
            break

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    c'est assez fouilli, enfin perso j'ai pas compris grand chose de ce que tu veux faire

    Citation Envoyé par delandam Voir le message
    Je cherche à exécuter (de la meme manière qu'un Run sur IDLE) un script Python placé dans un fichier TicTacToe.py, sur une page Web ttt.html.
    non, sur le web on cause html/javascript/jquery/etc. mais on cause pas python, donc si tu veux faire un Run d'un script python trouvé sur le net, il faut obligatoirement soit que ton navigateur web intègre un interpréteur python (c'est assez peu courant tout de même), soit un enregistrer un nouveau protocole (python://www.site.web/machin.py) ou une association automatique (ouvrir avec... / toujours effectuer cette opération etc.)

    si ce que tu veux c'est coder un CGI en python, il faut un serveur web/cgi qui permette de comprendre python (apache/mod_python pour ne citer que celui là) et que ton script python (cgi) fasse l'effort de causer html/javascript/etc.

    si ce que tu veux c'est "relier" un script python standard (prévu pour s'exécuter dans un terminal par exemple) avec une page web, tu seras obligé de coder un intermédiaire qui dialoguera d'un côté avec le tictactoe, et de l'autre qui dialoguera avec le client web en html/jquery et cie. et se chargera de faire les convertisseurs

    en espérant qu'au moins un de ces scénarios répond à ta question

    Si quelqu'un peut m'aiguiller car malheureusement, en BTS SIO, on apprend à faire des programmes en Python, on apprend à faire des sites web mais on n'apprend pas à intégrer le programme Python au site web (quel en est l’Intérêt alors ?).
    tes prédécesseurs faisaient du Visual Basic, te plains pas.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par delandam Voir le message
    il est indiqué d'utiliser un interpréteur Python coté client, qu'il faut malheureusement pour chacun des utilisateurs télécharger. Or, je préférerai, de loin, faire comme avec la bibliothèque JQuery
    Un navigateur Web connaît Javascript, HTML, CSS.... pour exécuter du Python vous avez par exemple skulpt qui est une implémentation de Python dans le navigateur ou Brython qui permet d'écrire en Python ce que vous faites normalement avec Javascript. Dans les deux cas, on charge des .js (comme JQuery) qui vont traduire les instructions Python en Javascript qui sera, in fine, exécuté par le navigateur.

    Citation Envoyé par delandam Voir le message
    Si quelqu'un peut m'aiguiller car malheureusement, en BTS SIO, on apprend à faire des programmes en Python, on apprend à faire des sites web mais on n'apprend pas à intégrer le programme Python au site web (quel en est l’Intérêt alors ?).
    "programmer" est un savoir faire indépendant du langage de programmation. Sauf que pour "apprendre" (faire des exercices...) difficile de se passer d'un langage de programmation. Si on choisit Python, c'est que beaucoup d'autres langages font beaucoup trop de "bruit": l'essentiel de "programmer" est un peu noyé dans les détails de tout ce qu'il va falloir comprendre/faire pour...
    Mais ce que vous aurez appris avec Python côté "programmation", vous permettra d'apprendre plus rapidement des langages plus adaptés aux applications que vous devrez réaliser (comme Javascript par exemple).

    Un seul langage pour programmer n'importe quel type d'application et la déployer sur n'importe quel environnement système est une chimère derrière laquelle l'informatique cours depuis des années. Java, C++, Python,... viennent tous avec des bibliothèques "standards" qui permettent de réaliser cela. Mais seulement "en partie": il y a des applications qu'il sera préférable de coder en Python, d'autres irréalistes à coder en autre chose que C++, etc... Et les choix se feront sur des critères non techniques tels que la stabilité des spécifications, le nombre de programmeurs sollicités, les exigences qualité,... et non sur des qualités intrinsèques du langage de programmation.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Pour répondre à la question : Est-il possible de lancer un script python derrière un site Web, la réponse est oui !
    MAIS, il faut que ton environnement serveur te le permette...
    Perso, je le fait avec un raspberry pi2, acquisition de données (au travers du port GPIO) -> stockage en base de donnée MySQL -> serveur Apache -> restitution via html/python.
    Attention toute fois c'est pas une partie de plaisir... j'y ai passé quelques heures, avec beaucoup de café

    Pour t'aider un peu regarde du coté https://docs.python.org/3.2/howto/webservers.html

  5. #5
    Futur Membre du Club Avatar de delandam
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Système D
    Merci à tous pour vos commentaires, Skulpt et Brython se rapprochent plus de ce que je voulais faire au final. J'ai regardé leurs exemples et le code derrière ; c'est du charabia pire que du finnois. J'ai l'impression des fois qu'il faut avoir déjà Bac +7 en informatique pour comprendre certains sites d'informatique. Donc je laisse tomber cette solution.

    Je vais laisser les utilisateurs télécharger un interpréteur Python. Faute de grives, on doit se contenter de merles.

    Encore merci pour votre aide.

    Bonne continuation.

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    mais c'est peut-être pas plus mal de manger du merle si la grive est malade, en l'occurrence permettre à un navigateur d'exécuter en local du code arbitraire récupéré sur le net juste en cliquant sur un lien (ou peut-être même pas d'ailleurs) présente tout un tas de risques en termes de sécurité que les homologues comme JavaScript, Flash ou Java ont mis des années à étanchéiser , je doute que des browsers alternatifs s'en sortent mieux pour cloisonner un interpréteur python

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    je doute que des browsers alternatifs s'en sortent mieux pour cloisonner un interpréteur python
    Nan... le truc c'est qu'on traduit le Python en Javascript qui sera interprété par n'importe quel navigateur. Au niveau performance, c'est pas terrible, mais "techniquement" çà fonctionne.

    Citation Envoyé par delandam Voir le message
    Je vais laisser les utilisateurs télécharger un interpréteur Python. Faute de grives, on doit se contenter de merles.
    Si le but est de diffuser vos programmes en évitant à l'utilisateur d'avoir à installer Python et bibliothèques externes, une solution intermédiaire est ce que fait cx_freeze: on emballe Python, bibliothèques et application dans une sorte d’exécutable qui pourra être installé sur la cible.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Nan... le truc c'est qu'on traduit le Python en Javascript qui sera interprété par n'importe quel navigateur. Au niveau performance, c'est pas terrible, mais "techniquement" çà fonctionne.
    ah oui ok, donc c'est de facto limité, mais même techniquement l'idée en elle-même me laisse un peu songeur je dois avouer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 24/05/2016, 18h31
  2. Intégrer script python sur ma page web
    Par titoum76 dans le forum Déploiement/Installation
    Réponses: 3
    Dernier message: 24/11/2011, 15h13
  3. Afficher les réponses d'un script python sur un page web
    Par Gregzz dans le forum Réseau/Web
    Réponses: 8
    Dernier message: 06/08/2010, 12h48
  4. Exécuter un script perl sur une page HTML
    Par natie_49 dans le forum Web
    Réponses: 13
    Dernier message: 05/03/2007, 16h50
  5. Intégrer un script python dans une page Web
    Par Mysti¢ dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 02/11/2006, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo