Python sur page web php

Python sur page web php - Python - Programmation

Marsh Posté le 23-04-2014 à 11:28:34    

Bonjour à tous,
 
Je suis novice en Python et j'aimerais exécuter un script Python sur une page web en PHP. Ce script me permet de lire les données envoyées par ma Arduino Uno sur le port USB de mon PC. Lorsque je l'exécuter sur le terminal Ubuntu ça fonctionne parfaitement.  
 
J'ai crée un répertoire dans var/www en localhost pour tester le script python sur une interface web. J'ai mis à l'intérieur le script PHP + Python. Je leur est donné les droits chmod 777.
 
Script PHP :
 

Code :
  1. <body>
  2. <?php
  3. $output = shell_exec('python humidite.py');
  4. echo "<pre>$output</pre>";
  5. ?>
  6. </body>
  7. </html>


 
Script Python :
 

Code :
  1. #!/usr/bin/python
  2. import serial
  3. import time
  4. locations=['/dev/ttyACM0']
  5. for device in locations:
  6.     try:
  7.         ser = serial.Serial(device, baudrate=9600, timeout=1, writeTimeout=1)
  8.         while True:
  9.             ligne = ser.readline()
  10.             print ligne
  11.     except:
  12.         print "Echec de connexion sur", device


 
Mais ça m'affiche sur ma page web : Echec de connexion sur /dev/ttyACM0
 
D'où vient le problème svp ?  :)

Reply

Marsh Posté le 23-04-2014 à 11:28:34   

Reply

Marsh Posté le 23-04-2014 à 18:59:40    

Affiches le contenu de l'exception au lieu de le bouffer, ça te le dira [:spamafote]
 
Accessoirement, tu peux simplifier le code de transmission, tu n'as normalement pas besoin d'une boucle explicite.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 23-04-2014 à 22:36:40    

C'est bon j'ai réussi à afficher les 15 premières mesures de mon capteurs d'humidité sur ma page web en PHP. J'ai résolu le problème de permission  
 
Mais j'aimerais que ça m'affiche que sur une seule ligne les mesures et que ça défile continuellement. Par exemple je ferais un script PHP où il y aura écris Humidité=....... et sur ces pointillés les mesures changeront. J'espère que je me suis fait comprendre :p A votre avis c'est faisable en modifiant le script Python ou PHP ?  
 
Voici mon nouveau script Python :
 

Code :
  1. #!/usr/bin/python
  2. import serial
  3. import time
  4. locations=['/dev/ttyACM0']
  5. for device in locations:
  6.     try:
  7.         ser = serial.Serial(device, baudrate=9600, timeout=1, writeTimeout=1)
  8.         for _ in range(15):
  9.             ligne = ser.readline()
  10.             print ligne
  11.     except Exception as why:
  12.         print "Echec de connexion : %s" % why

Reply

Marsh Posté le 23-04-2014 à 23:51:00    

Soit tu stockes les données dans un fichier ou soit tu fais des appels ajax.

Reply

Marsh Posté le 24-04-2014 à 08:48:31    

J'ai une dernière question. Pour l'instant je ne vais afficher qu'une seule ligne que j'actualiserai à chaque fois. Dans mon script en Python je charge 4 lignes donc 4 mesures. Mais je ne veux afficher que la 4ème ligne sur la page en PHP car la 1ère mesure est souvent erronée.

 

Comment faire svp ?

 

Voici mes commandes :

 
Code :
  1. for device in locations:
  2.     try:
  3.         ser = serial.Serial(device, baudrate=9600, timeout=1, writeTimeout=1)
  4.         for _ in range(4):
  5.             ligne = ser.readline()
  6.             print ligne


Message édité par Prav26 le 24-04-2014 à 08:49:46
Reply

Marsh Posté le 24-04-2014 à 09:30:17    

C'est bon j'ai trouvé la solution à mon problème.

 
Code :
  1. for device in locations:
  2.     try:
  3.         ser = serial.Serial(device, baudrate=9600, timeout=1, writeTimeout=1)
  4.         line = ser.readlines()[4].strip('\n')
  5.         print line



Message édité par Prav26 le 24-04-2014 à 10:04:29
Reply

Marsh Posté le 24-04-2014 à 10:27:50    

Ton script il est arrêté à la fin du shell_exec, sinon t'aurais pas de sortie.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed