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

Python Discussion :

Lancer fonction python depuis un bouton d'une page html [Débutant(e)]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut Lancer fonction python depuis un bouton d'une page html
    Bonjour,

    Je débute et découvre le python.

    J'aimerai faire une page web très simple pour basculer les relais d'une carte.

    Pourquoi avec ce code il ne se passe rien :

    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
    #!/usr/bin/python
     
    from subprocess import call, check_output
    from bottle import route, post, request, run, FlupFCGIServer
    @route('/')
    def hello():
            return '''<form method="POST" action="/helloworld.py">
    <input name="relay_1" value="Relay 1" type="button" onclick="relay();">
                  </form>'''
     
    @post('/')
    def relay():
        out = call (["/usr/sbin/i2cset", "-y", "0", "0x21", "0x00", "0x80"])
     
    run(host='localhost', port=8080, server=FlupFCGIServer)
    Alors qu'avec celui la, ca fonctionne:

    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
    #!/usr/bin/python
     
    from subprocess import call, check_output
    from bottle import route, post, request, run, FlupFCGIServer
    @route('/')
    def hello():
            return '''<form method="POST" action="/helloworld.py">
    <input name="name"     type="text" />
    <input type="submit" />
                  </form>'''
     
    @post('/')
    def login_submit():
        name     = request.forms.get('name')
        out = call (["/usr/sbin/i2cset", "-y", "0", "0x21", "0x00", name])
     
    run(host='localhost', port=8080, server=FlupFCGIServer)
    Quelqu'un pourrait m'éclairer/aider, svp?!

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Par défaut
    la seule différence dans ton code se situe dans call() il me semble

    j'ai pas les moyens de tester tes 2 bouts de code mais es-tu sûr que "request.forms.get('name')" donne "0x80"? N'y a-t-il pas non plus de différence de type entre ces 2 éléments (1 string et 1... )?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut
    Bah le name c'est un champ texte dans lequel pour le test j'écris 0x80.

    Donc logiquement c'est pareil

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    L'erreur ne se situe pas là.

    Dans ton premier exemple, ton bouton défini par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input name="relay_1" value="Relay 1" type="button" onclick="relay();">
    ne soumet pas le formulaire, rien n'est renvoyé en POST à ton serveur, donc ta fonction relay n'est pas appelée.

    le onclick="relay();" ne fait qu'appeler une fonction javascript si elle est chargée avec la page. Tu ne peux pas appeler une fonction serveur depuis ton navigateur de cette manière.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations forums :
    Inscription : Juin 2010
    Messages : 39
    Par défaut
    Et du coup comment faire sans utiliser un bouton submit comme le 2e exemple?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Logiquement tu dois passer par une soumission de formulaire, qui fera un appel au serveur.

    Sinon suivant tes besoins, tu peux effectuer cette requete au serveur via un appel ajax, mais ça devient beaucoup plus compliqué.

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

Discussions similaires

  1. Affichage ou non d'un bouton dans une page HTML
    Par forsay1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/09/2014, 15h29
  2. [XL-2010] Cliquer sur un bouton d'une page HTML
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/05/2013, 21h43
  3. Réponses: 4
    Dernier message: 21/11/2011, 10h42
  4. Réponses: 4
    Dernier message: 24/08/2007, 15h56
  5. Réponses: 6
    Dernier message: 12/06/2006, 20h03

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