[resolu]probleme lancement script python
Modérateurs : Francois, Manfraid
Re: probleme lancement script python
en fait je pense que peu importe le système de stockage des paramètres, ils sont tout aussi puissant l'un que l'autre, c'est plus je pense une question d'habitude
personnellement comme j'utilise souvent le JSON pour les requêtes AJAX j'ai une tendance a utilisé ce système.
mais la ou je ne suis pas d'accord avec toi sur le fait que stocker en python est plus pour des variables simples c'est que c'est tu peu en plus créer ta connexion a la base de donnée dans ton fichier de paramètre et utilisé cette connexion dans le script normal
personnellement comme j'utilise souvent le JSON pour les requêtes AJAX j'ai une tendance a utilisé ce système.
mais la ou je ne suis pas d'accord avec toi sur le fait que stocker en python est plus pour des variables simples c'est que c'est tu peu en plus créer ta connexion a la base de donnée dans ton fichier de paramètre et utilisé cette connexion dans le script normal
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Re: probleme lancement script python
au fait voila ton script adapter pour le python2 mais le truc qui me parait bizarre c'est le mélange de code pour python2 et python 3, je te conseille d'essayer de le lancer a la main et de mettre ici le retour car c'est sur il y aura des messages d'erreur
Code : Tout sélectionner
#!/usr/bin/python2.7
import RPi.GPIO as GPIO
import os
import time
#import gdata.calendar.service
#import gdata.calendar
#import atom.service
#import atom
#import gdata.service
import datetime
import MySQLdb
import httplib2
from RPi import GPIO
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import AccessTokenRefreshError
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run_flow
from oauth2client.client import flow_from_clientsecrets
GPIO.setmode (GPIO.BOARD)
GPIO.setup(15,GPIO.OUT)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(18,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)
#parametre de connexion au compte google pour recuperer l'agenda
#cal_client = gdata.calendar.service.CalendarService()
#cal_client.email = "user@gmail.com"
#cal_client.password = "mdp"
#cal_client.source = 'Google-Calendar_Python_Sample-1.0'
#cal_client.ProgrammaticLogin()
#definition de la categorie pour les log
cat='Piscine'
#pompemarche=0
#evenement=0
#connexion a la base SQL
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
#recuperation du mode de fontionnement dans la base SQL
mycursor.execute('SELECT pompe FROM variables WHERE ID=1')
enr=mycursor.fetchall()
for row in enr:
for col in row :
pompe=col
pompe=int(pompe)
print pompe
#recuperation de l'etat actuelle de la pompe
mycursor.execute('SELECT pompemarche FROM variables WHERE ID=1')
enr=mycursor.fetchall()
for row in enr:
for col in row :
pompemarche=col
pompemarche=int(pompemarche)
print pompemarche
#recuperation de l'etat precedent de la pompe
mycursor.execute('SELECT etatpompe FROM variables WHERE ID=1')
enr=mycursor.fetchall()
for row in enr:
for col in row :
evenement=col
evenement=int(evenement)
print evenement
mycursor.close()
mydb.close()
if pompe==1: #si la pompe passe a l'arret, inscription dans les log
pompemarche=0
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET pompemarche=0 WHERE ID=1')
mydb.commit()
mycursor.close()
mydb.close()
GPIO.output (21, True) # et arret de la pompe
GPIO.output (15, True)
GPIO.output (16, False)
GPIO.output (18, False)
elif pompe==2: #si la pompe passe en marche programme
GPIO.output (15, False)
GPIO.output (16, True)
GPIO.output (18, False)
#verification de l'agenda du jour pour voir si il y a des evenements prevus
scope = 'https://www.googleapis.com/auth/calendar'
flow = flow_from_clientsecrets('client_secret.json', scope=scope)
storage = Storage('credentials.dat')
credentials = storage.get()
class fakeargparse(object): # fake argparse.Namespace
noauth_local_webserver = True
logging_level = "ERROR"
flags = fakeargparse()
if credentials is None or credentials.invalid:
credentials = run_flow(flow, storage, flags)
http = httplib2.Http()
http = credentials.authorize(http)
service = build('calendar', 'v3', http=http)
# get the next 12 hours of events
epoch_time = time.time()
print epoch_time
start_time = epoch_time - 3600 # 1 hour ago
end_time = epoch_time + 12 * 3600 # 12 hours in the future
tz_offset = - time.altzone / 3600
if tz_offset < 0:
tz_offset_str = "-%02d00" % abs(tz_offset)
else:
tz_offset_str = "+%02d00" % abs(tz_offset)
start_time = datetime.datetime.fromtimestamp(start_time).strftime("%Y-%m-%dT%H:%M:%S") + tz_offset_str
end_time = datetime.datetime.fromtimestamp(end_time).strftime("%Y-%m-%dT%H:%M:%S") + tz_offset_str
#start_time = datetime.datetime.now()
#end_time = datetime.datetime.now()
print "Getting calendar events between: " + start_time + " and " + end_time
print start_time
print end_time
events = service.events().list(calendarId='id@group.calendar.google.com', timeMin=start_time, timeMax=end_time, singleEvents=True).execute()
#pprint.pprint(events)
for event in events['items']:
print event["summary"]
print event["start"]
str_date_deb=event["start"]
print str_date_deb
print type (str_date_deb)
print event["end"]
str_date_fin=event["end"]
print str_date_fin
str_date_deb=str(str_date_deb)
date_deb = datetime.datetime(int(str_date_deb[16:20]) , int(str_date_deb[21:23]), int(str_date_deb[24:26]), int(str_date_deb[27:29]), int(str_date_deb[30:32]), int(str_date_deb[33:35]))
str_date_fin=str(str_date_fin)
date_fin = datetime.datetime(int(str_date_fin[16:20]) , int(str_date_fin[21:23]), int(str_date_fin[24:26]), int(str_date_fin[27:29]), int(str_date_fin[30:32]), int(str_date_fin[33:35]))
print date_deb
print date_fin
maintenant=datetime.datetime.now()
maintenant=str(maintenant)
print maintenant
la = datetime.datetime(int(maintenant[0:4]) , int(maintenant[5:7]), int(maintenant[8:10]), int(maintenant[11:13]), int(maintenant[14:16]), int(maintenant[17:19]))
#maintenant=maintenant[0:19]
#maintenant=datetime.datetime(int(maintenant))
#print maintenant
print la
#inscription dans les log du la mise en marche programme
evenement=0
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET etatpompe=0 WHERE ID=1')
mydb.commit()
mycursor.close()
print evenement
if ((date_deb<=la) and (date_fin>=la)): #si on se trove pendant un evenement
print 'action en cours'
#print ("Cons.:",event.title.text)
print pompemarche
print 'en periode'
#pompemarche=1
evenement=1 #enregistrement de l'etat de la pompe pour le prochain test
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo") #log du demarrage du programme
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET etatpompe=1 WHERE ID=1')
mydb.commit()
mycursor.close()
print evenement
#GPIO.output (21, False)
#break
else: # si on est hors periode
print 'pas d action'
print 'hors periode'
#pompemarche=0
#evenement=0
#GPIO.output (21, True)
#break
if evenement==1 : # si la pompe doit marcher
if pompemarche==0 : #mais qu'elle etait arrete jusqu'a maintenant on log le demarrage
print ('demarrage programme')
j= time.strftime('%d-%m-%Y')
h=time.strftime('%H:%M:%S')
m='demarrage programme'
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
mycursor.execute ('INSERT INTO log (jour, heure, categorie, action) VALUES (%s,%s,%s,%s)',(j,h,cat,m))
mydb.commit()
mycursor.close()
pompemarche=1
#print ('arret systeme pompe')
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo") #et on confirme qu'elle est en marche
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET pompemarche=1 WHERE ID=1')
mydb.commit()
mycursor.close()
GPIO.output (21, False) #on met la pompe en marche
elif evenement==0: #si la pompe doit etre a l'arret
if pompemarche==1 : #et qu'elle etait en marche precedemment, on log la mise a l'arret
print 'arret programme'
j= time.strftime('%d-%m-%Y')
h=time.strftime('%H:%M:%S')
m='arret programme'
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
mycursor.execute ('INSERT INTO log (jour, heure, categorie, action) VALUES (%s,%s,%s,%s)',(j,h,cat,m))
mydb.commit()
mycursor.close()
pompemarche=0 #on confirme qu'elle est arrete
#print ('arret systeme pompe')
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET pompemarche=0 WHERE ID=1')
mydb.commit()
mycursor.close()
GPIO.output (21, True) #on arrete la pompe
elif pompe==3: #si la pompe passe en mode marche forcee
#print ('demarrage marche force')
pompemarche=1
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo") #on confirme sont etat en marche
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET pompemarche=1 WHERE ID=1')
mydb.commit()
mycursor.close()
GPIO.output (21, False) #on met la pompe en marche
GPIO.output (15, False)
GPIO.output (16, False)
GPIO.output (18, True)
print"pompe 1=" , pompemarche, " "
#time.sleep(30)
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
-
- Raspinaute
- Messages : 136
- Enregistré le : sam. 18 oct. 2014 19:09
Re: probleme lancement script python
Merci pour l'aide
Je vais essayer ce code
Penses tu que le mélange Python 2et Python 3 puisse être à l'origine du probleme d'un script qui fonctionne en ligne de commande et pas dans le cron?
De toutes façons, les PRINT ne servent pas au fonctionnement du script mais uniquement pour voir étape par étape si cela fonctionne
Je peux les retirer par un #
Je vais essayer ce code
Penses tu que le mélange Python 2et Python 3 puisse être à l'origine du probleme d'un script qui fonctionne en ligne de commande et pas dans le cron?
De toutes façons, les PRINT ne servent pas au fonctionnement du script mais uniquement pour voir étape par étape si cela fonctionne
Je peux les retirer par un #
Re: probleme lancement script python
déja je suis surpris qu'il fonctionne en ligne de commande
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
-
- Raspinaute
- Messages : 247
- Enregistré le : mar. 7 oct. 2014 09:46
- Localisation : Morsang / Orge - Essonne
- Contact :
Re: probleme lancement script python
L' avantage pour moi des fichiers de configuration c'est que le même fichier *.ini peut-être utilisé aussi bien par mes scripts python que par mes scripts PHPManfraid a écrit :en fait je pense que peu importe le système de stockage des paramètres, ils sont tout aussi puissant l'un que l'autre, c'est plus je pense une question d'habitude
personnellement comme j'utilise souvent le JSON pour les requêtes AJAX j'ai une tendance a utilisé ce système.
mais la ou je ne suis pas d'accord avec toi sur le fait que stocker en python est plus pour des variables simples c'est que c'est tu peu en plus créer ta connexion a la base de donnée dans ton fichier de paramètre et utilisé cette connexion dans le script normal
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net
-
- Raspinaute
- Messages : 136
- Enregistré le : sam. 18 oct. 2014 19:09
Re: probleme lancement script python
Ben mon script fonctionnaitManfraid a écrit :déja je suis surpris qu'il fonctionne en ligne de commande
Mais celui que tu m'a corrigé pour Python 2.7 ne fonctionne pas
Il me fait une erreur sur l'accès à l'agenda
Je ne vois pas pourquoi
A part les instructions PRINT, je n'arrive pas à voir ce que tu as modifié dans le script pour l'adapter à Python 2.7
-
- Raspinaute
- Messages : 136
- Enregistré le : sam. 18 oct. 2014 19:09
Re: probleme lancement script python
J'avais pas vu qu'on était déjà le 25
Joyeux Noël a tous
Joyeux Noël a tous
Re: probleme lancement script python
fait une copie du message d'erreur ainsi que la ligne de commande que tu saisie
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
-
- Raspinaute
- Messages : 136
- Enregistré le : sam. 18 oct. 2014 19:09
Re: probleme lancement script python
En fait, il n'y a pas de message d'erreur
Celui que j'obtenais provenait du fait que tu avais (intelligemment) supprimer l'ID de l'agenda que j'avais bettement laissé en clair. J'avais oublié de le remettre
donc, le script fonctionne bien lorsque je le lance depuis une fenetre terminal (sudo python pompe2.py ou python pompe2.py lorsque je suis loggé en ROOT)
Mais ne fonctionne pas lorsque je mets * * * * * sudo python /var/www/pompe2.py dans le CRON
Alors que cette meme ligne fonctionnait lorsque le script python etait ecrit pour l'API google V2
Je suis désespèré
Celui que j'obtenais provenait du fait que tu avais (intelligemment) supprimer l'ID de l'agenda que j'avais bettement laissé en clair. J'avais oublié de le remettre
donc, le script fonctionne bien lorsque je le lance depuis une fenetre terminal (sudo python pompe2.py ou python pompe2.py lorsque je suis loggé en ROOT)
Mais ne fonctionne pas lorsque je mets * * * * * sudo python /var/www/pompe2.py dans le CRON
Alors que cette meme ligne fonctionnait lorsque le script python etait ecrit pour l'API google V2
Je suis désespèré
-
- Administrateur
- Messages : 3233
- Enregistré le : mer. 17 sept. 2014 18:12
- Localisation : Seine et Marne
Re: probleme lancement script python
Bonjour,
Apparemment tu utilises le Cron de l'utilisateur courant puisse que tu mets un "Sudo" dans ta ligne de commande.
Si ton script doit être exécuté en tant que Root, ce qu'il faut faire pour exécuter une commande Cron via le user Root, c'est mettre ta commande dans la CronTab de Root.
Pour cela :
Puis tu mets ta commande sans le sudo.
Apparemment tu utilises le Cron de l'utilisateur courant puisse que tu mets un "Sudo" dans ta ligne de commande.
Si ton script doit être exécuté en tant que Root, ce qu'il faut faire pour exécuter une commande Cron via le user Root, c'est mettre ta commande dans la CronTab de Root.
Pour cela :
Code : Tout sélectionner
sudo crontab -e
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.