ckl6767 Posté(e) le 8 octobre 2014 Partager Posté(e) le 8 octobre 2014 (modifié) Bonjour, Pourriez-vous m'aider je débute en Python. J'ai installé Python3 sur le NAS à travers le Centre de paquet Lorsque connecté en ssh sur mon serveur je lance un script Python, cela fonctionne bien. A présent, je souhaiterais lancer un script à travers une requête html. Dans mon index.html j'ai mis, entre autres... <FORM ACTION="http://192.168.1.20/input_query.py" METHOD="post"> <INPUT TYPE="submit" NAME="send" VALUE="Exécuter le script"> </FORM> Cela correspond à un bouton qui va lancer le script : "input_query.py" Pour info, ce fichier est executable, et lorsque je le lance dans mon shell (connecté en ssh), j'obtiens le résultat escompté Le fichier : input_query.py #!/usr/bin/python3 # -*- coding: UTF-8 -*- # Affichage d'un formulaire HTML simplifié : print ("Content-Type: text/htmln") print (""" <H3><FONT COLOR="Royal blue"> Page web produite par un script Python </FONT></H3> <FORM ACTION="print_result.py" METHOD="post"> <P>Veuillez entrer votre nom dans le champ ci-dessous, s.v.p. :</P> <P><INPUT NAME="visiteur" SIZE=20 MAXLENGTH=20 TYPE="text"></P> <P>Veuillez egalement me fournir une phrase quelconque :</P> <TEXTAREA NAME="phrase" ROWS=2 COLS=50>Mississippi</TEXTAREA> <P>J'utiliserai cette phrase pour etablir un histogramme.</P> <INPUT TYPE="submit" NAME="send" VALUE="Action"> </FORM> """) Finalement, lorsque j'accède à ma page "index" à travers mon navigateur, et que j'appuie sur le bouton généré par "index.html" j'obtiens une nouvelle page qui affiche: #!/usr/bin/python3 # -*- coding: UTF-8 -*- # Affichage d'un formulaire HTML simplifié : print ("Content-Type: text/htmln") print (""" <H3><FONT COLOR="Royal blue"> Page web produite par un script Python </FONT></H3> <FORM ACTION="print_result.py" METHOD="post"> <P>Veuillez entrer votre nom dans le champ ci-dessous, s.v.p. :</P> <P><INPUT NAME="visiteur" SIZE=20 MAXLENGTH=20 TYPE="text"></P> <P>Veuillez egalement me fournir une phrase quelconque :</P> <TEXTAREA NAME="phrase" ROWS=2 COLS=50>Mississippi</TEXTAREA> <P>J'utiliserai cette phrase pour etablir un histogramme.</P> <INPUT TYPE="submit" NAME="send" VALUE="Action"> </FORM> """) C'est comme si le python n'a pas été exécuté Avez-vous une explication ? Merci Christian Modifié le 8 octobre 2014 par ckl6767 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sp@r0 Posté(e) le 9 octobre 2014 Partager Posté(e) le 9 octobre 2014 De base ta méthode est discutable .... Mais bon. Pour faire marcher comme tu le propose il faut activer mod_python dans le serveur web mais je ne sais pas si syno le propose Sinon il est préférable d'utiliser une des 2 méthodes ci dessous : - travailler avec un script CGI - générer un serveur web en phthon directement et au passage je te conseil d'utiliser un framework dédié genre django Dernier point pourquoi du phyhon et pas du php ?? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ckl6767 Posté(e) le 9 octobre 2014 Auteur Partager Posté(e) le 9 octobre 2014 (modifié) Merci. En fait j'ai déjà monté un serveur Web sur mon synology sur base de Joomla. Ici, ce que je cherche de faire, est une simple page HTML, qui permettra d'interfacer mon aduino. (piloter des sorties/ lire les entrées analogiques) D'où, l'idée du python.(langage que je découvre, on m'en a dit tellement du bien ) L'exemple que je donnais n'a qu'un but de test, à savoir: lancer du code python à travers une requête HTML. Pour mon application Arduino, (par exemple thermostat piloter par une page Web) je trouvais un framework comme django trop lourd. Ton avis ? Quel est la différence avec un script CGI ? Je viens de faire un test, et déposé au niveau de ma racine web, le script hellohtml.cgi #!/usr/bin/env python3 print("Content-Type: text/htmlnn") # html markup follows print(""" <html> <Title>Hello in HTML</Title> <body> <p>Hello There!</p> <p><b>Hi There!</b></p> </body> </html> """) Lorsque j'accède à: http://192.168.1.20/hellohtml.cgi Pas mieux "page introuvable" Je regarde la possibilité d'activer le mod_python Modifié le 9 octobre 2014 par ckl6767 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mike913 Posté(e) le 9 octobre 2014 Partager Posté(e) le 9 octobre 2014 Bonjour, J'ai trouvé ceci 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sp@r0 Posté(e) le 9 octobre 2014 Partager Posté(e) le 9 octobre 2014 Pour ce genre de chose j'utilise le module Python SimpleHTTPServer pour générer un serveur web en 3 ligne directement depuis Python et je m'en sert comme d'un web services en REST Je fais l'interface directement dans Apache et j'appel en jquery le web service tu peux faire des interface super classe 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ckl6767 Posté(e) le 9 octobre 2014 Auteur Partager Posté(e) le 9 octobre 2014 Les choses se compliques.. * SimpleHTTPServer * REST Pour un débutant en Python ... Disons que tous est parti du fait que je ne voulais pas faire tourner mon serveur Web uniquement sur Arduino, et profiter de l'environnement Synology/Apache/Python/.. pour monter mon serveur Web sur Synology (Celal laissant une plus grande ouverture .. ) Et, ensuite de piloter mon Arduino à travers des messages UDP <<---->> Serveur Web Synology Pour envoyer/recevoir ces messages UDP, je voulais utiliser la couche Python Ne connaissant rien aux Webservices, j'ai peur de complexifier l'approche Du coup la solution proposée par Mike913, et peu être plus adapté pour moi.. Un dernier avis ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Diaoul Posté(e) le 9 octobre 2014 Partager Posté(e) le 9 octobre 2014 Ne pas passer par un protocole haut niveau pour communiquer avec l'Arduino ? L'UDP ce n'est pas fiable, vaut mieux faire du TCP si tu veux rester sur de l'IP. Perso je passe par des XBee avec protobuf pour la sérialisation des messages (librairie nanopb sur Arduino). Tu peux regarder le module Python que j'ai développé pour la communication avec un module XBee : http://hachi.readthedocs.org/en/latest/ 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sp@r0 Posté(e) le 9 octobre 2014 Partager Posté(e) le 9 octobre 2014 Les choses se compliques.. * SimpleHTTPServer * REST Pour un débutant en Python ... Disons que tous est parti du fait que je ne voulais pas faire tourner mon serveur Web uniquement sur Arduino, et profiter de l'environnement Synology/Apache/Python/.. pour monter mon serveur Web sur Synology (Celal laissant une plus grande ouverture .. ) Et, ensuite de piloter mon Arduino à travers des messages UDP <<---->> Serveur Web Synology Pour envoyer/recevoir ces messages UDP, je voulais utiliser la couche Python Ne connaissant rien aux Webservices, j'ai peur de complexifier l'approche Du coup la solution proposée par Mike913, et peu être plus adapté pour moi.. Un dernier avis ? Alors REST ça veut dire que ça réagit à une requête GET ou POST comme une page web quoi ... et simple http request c'est simple : #!/usr/bin/env python2.7 import string,cgi,time import urllib from os import curdir, sep from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer class MyHandler(BaseHTTPRequestHandler): def do_GET(self): try: print self.path if self.path == "/bonjour.html": self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write("bonjour"); # la tu mets ton code que tu veux return if self.path == "/coucou.html": self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write("coucou"); # la tu mets ton code que tu veux return return except IOError: self.send_error(404,'File Not Found: %s' % self.path) def main(): try: server = HTTPServer(('', 8888), MyHandler) print 'started httpserver...' server.serve_forever() except KeyboardInterrupt: print '^C received, shutting down server' server.socket.close() if __name__ == '__main__': main() Tu copies ça dans un fichier sur le nas tu le rends exécutable et tu l'exécute cela fait çà : - crée un webservice sur le port 8888 qui réagit à des requêtes GET - http://IPDUNAS:8888/bonjour.html -> affiche bonjour sur le shell et exécute ce que tu rajoutes à cet endroit dans le code - http://IPDUNAS:8888/salut.html -> affiche salut sur le shell et exécute ce que tu rajoutes à cet endroit dans le code on peux aller beaucoup plus loin et réagir aux requêtes POST on peux aussi servir des fichiers ou des répertoires entier avec qq ligne de plus 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ckl6767 Posté(e) le 9 octobre 2014 Auteur Partager Posté(e) le 9 octobre 2014 (modifié) Pas mal ... pas mal L'approche avec les webservices est super intéressante. Je vais m'y intéressé, et peaufiner quelques exemples basiques A première abord j'ai l'impression que ça répond à ma demande En tous les cas, toutes les idées à travers ce Blog vont me permettre d'avancer dans la mise en place de ce petit projet. "Module Client" Thermostat, pour prendre cet exemple avec : Arduino + Xbee : "Module Centrale Principale" reliée au réseau Ethernet : Arduino + Xbee "Serveur Web Synology": qui hébergera le serveur Web à travers des Web services python.. Merci Petite question subsidiaire, quel est environnement de développement que tu utilises pour développer en python ? Modifié le 9 octobre 2014 par ckl6767 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sp@r0 Posté(e) le 9 octobre 2014 Partager Posté(e) le 9 octobre 2014 Je n'utilise pas d'IDE pour Python, je me contente d'un éditeur amélioré textwrangler ou notepad++ selon que je sois sous OS X/Linux ou Windows. Si tu est intéressé par de la domotique du python et de la bidouille arduino jette un coup d'œil au protocole xpl c'est ce que j'utilise maintenant c'est franchement très puissant bien qu'un peu difficile d'accès mais tellement génial !!! 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Diaoul Posté(e) le 9 octobre 2014 Partager Posté(e) le 9 octobre 2014 Pour faire du CGI je te conseillerai Flask, ça évite de réinventer la roue. Tu fais ton application avec Flask puis tu fais un CGI à coté. Tu trouveras plein de documentation sur Flask + CGI sur Google et en plus tu peux tester en live avec le serveur intégré. Coté protocole, il faut savoir que le XPL c'est très verbeux et tu vas te faire chier à sérialiser ton message si tu veux faire de l'XBee, c'est pour ça que je suis passé par protobuf perso, en plus ça fait du code clean. L'inconvénient c'est que nanopb, aussi petit soit-il, prend de la place sur l'Arduino donc je recommande 32kb minimum. 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ckl6767 Posté(e) le 9 octobre 2014 Auteur Partager Posté(e) le 9 octobre 2014 Que des informations passionnantes. Merci pour tout. Va falloir tout mettre en oeuvre maintenant .. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ckl6767 Posté(e) le 12 octobre 2014 Auteur Partager Posté(e) le 12 octobre 2014 Pourriez-vous me dire comment installer Flask sur Synology ? Merci 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Diaoul Posté(e) le 12 octobre 2014 Partager Posté(e) le 12 octobre 2014 Je vais t'indiquer la méthode la plus "propre" : Installer le paquet Python de SynoCommunity Se connecter en "root" en SSH > PATH=/usr/local/python/bin:$PATH # inclut les binaires python > cd /volume1/monappli/ # te déplace dans le répertoire de ton appli > virtualenv env # créé l'environnement virtuel > source env/bin/activate # active l'environnement virtuel > pip install Flask # installe flask dans cet environnement virtuel Pour retourner dans ton appli par la suite : > cd /volume1/monappli/ && source env/bin/activate Puis pour lancer ton appli "app.py" avec ton environnement virtuel : > python app.py L'avantage de cette technique c'est que tu as un environnement séparé et que tu peux mettre à jour le paquet Python sans perdre aucune donnée. Par ailleurs si tu veux supprimer l'environnement virtuel tu n'as qu'a supprimé le répertoire "env" dans /volume1/monappli/ 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ckl6767 Posté(e) le 12 octobre 2014 Auteur Partager Posté(e) le 12 octobre 2014 Merci. Pour l'instant sur Syno, j'ai mis le paquet Python3. Avec l’environnement virtuel, je vais donc démarrer en Python3 ? J'ai lu que " Python 3.3 vient avec venv" J'ai vu que Flask était aussi bien adapté sur 2.7 que sur 3. Vous confirmez ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Diaoul Posté(e) le 12 octobre 2014 Partager Posté(e) le 12 octobre 2014 La version de SynoCommunity fourni virtualenv sur Python 2.7 et Python3. Si tu veux utiliser venv à la place, effectivement il te faudra Python3. Flask fonctionne en Python3 mais il se peut que certaines librairies tierces (extensions de Flask ou autres) ne soient pas encore portées. Le mieux c'est de commencer avec Python3 et si tu vois qu'un module dont tu as besoin n'est pas porté tu repasses sur Python 2.7. De toute façon 2.7 est très proche de 3.3+. SynoCommunity fourni Python3 à la version 3.4.1 ainsi que certains modules préinstallés. 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ckl6767 Posté(e) le 13 octobre 2014 Auteur Partager Posté(e) le 13 octobre 2014 Merci beaucoup! 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ckl6767 Posté(e) le 21 novembre 2014 Auteur Partager Posté(e) le 21 novembre 2014 Bonjour Je viens de développer mon application arduino avec Field Wifi qui communique en TCP avec un serveur web basé sur Flask et tournant sur Ubuntu. J'ai procédé de la sorte pour faire mes premiers tests avant de tout pousser sur le NAS Au passage: Flask est excellant, merci pour le conseil Petite question que je n'arrive pas à résoudre sur synology J'ai installé Python3 à partir du package de la SynoCommunity Je voulais installer flask avec environnement virtuel comme suit PATH=/usr/bin/python3:$PATH cd [myproject] virtualenv venv -p /usr/bin/python3 . venv/bin/activate #framework pip install Flask or virtualenv n'est pas reconnu, ni pip pour installer flask Pourriez-vous me conseiller ? Merci 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gaetan.cambier Posté(e) le 21 novembre 2014 Partager Posté(e) le 21 novembre 2014 Virtualenv faut mettre le path complet il me semble. Suis sur mon GSM donc je sais pas te donner le chemin exact mais il doit se trouver dans le sous dossier bin du dossier python 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Diaoul Posté(e) le 22 novembre 2014 Partager Posté(e) le 22 novembre 2014 (modifié) C'est: PATH=/usr/local/python3/bin:$PATH Avec le package SynoCommunity Modifié le 22 novembre 2014 par Diaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ckl6767 Posté(e) le 22 novembre 2014 Auteur Partager Posté(e) le 22 novembre 2014 malheureusement je n'ai pas de répertoire python3... au niveau du répertoire /usr/local J'avais regardé avant de poser la question au niveau du forum Peut-être que l'installation de python3 s'est mal passé. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gaetan.cambier Posté(e) le 22 novembre 2014 Partager Posté(e) le 22 novembre 2014 Python de synocomunoty est bien installé ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Diaoul Posté(e) le 22 novembre 2014 Partager Posté(e) le 22 novembre 2014 Tu as du installer le python3 de Synology et non SynoCommunity. Il n'y a pas de virtualenv dans celui de Synology. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ckl6767 Posté(e) le 22 novembre 2014 Auteur Partager Posté(e) le 22 novembre 2014 Sorry Quand tu parlais de paquets de SynoCommunity, pour moi je pensais que tu voulais dire les paquets de synology .. Je viens de faire l'installation Après avoir du Mettre le niveau de confiance sur "N'importe quel éditeur", la paquet python3 c'est installé Merci 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
ckl6767 Posté(e) le 22 novembre 2014 Auteur Partager Posté(e) le 22 novembre 2014 (modifié) C'est toujours pas bon DiskStation> pwd /volume1/web/arduino/web_server DiskStation> which virtualenv /usr/local/python3/bin/virtualenv DiskStation> virtuatlenv env -ash: virtuatlenv: not found Là je crois que c'est virtualenv qui ne s'est pas installé correctement DiskStation> ll /usr/local/python3/bin/virtualenv -rwxr-xr-x 1 root root 333 Sep 16 08:10 /usr/local/python3/bin/virtualenv DiskStation> Auriez-vous une idée ?? Modifié le 22 novembre 2014 par ckl6767 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.