Salut,
J'ai du nouveau sur mon problème.
Il n'y avait pas de droit d'écriture pour le groupe et pour les autres sur le fichier newbackground.xml, alors je les ai mis histoire de voir.
Le fichier n'a toujours pas été modifié.
J'ai fait un
sh newbackground.py
et j'ai eu l'erreur suivante ;
root@philero-desktop:/home/philero/Apparence/WallDyn# sh newbackground.py
import: unable to grab mouse `': Resource temporarily unavailable.
from: can't read /var/mail/xml.dom.minidom
from: can't read /var/mail/xml.dom
from: can't read /var/mail/math
import: unable to grab mouse `': Resource temporarily unavailable.
newbackground.py: 9: Syntax error: word unexpected (expecting ")")
J'ai regardé le code mais je n'ai pas vu d'erreur de parenthèse.
Voici mon fichier :
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys, urllib, getopt,os, commands,re
from xml.dom.minidom import Document
from xml.dom import minidom
from math import *
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s',
stream=sys.stderr)
#Variable
#Nom du programme
filename = sys.argv[0]
#Dossier ou est stocké le programme
fileprog = sys.path[0]
refville = 'USCA1020'
cron = 3
controlville = 0
controlpath = 0
#Fonction
def usage():
print "Logiciel pour mettre en place un fond écran en fonction de la météo et de l\'heure \n ------Commande Possible ------- \n -h,--help pour obtenir cet aide \n -v,-ville pour définir la variable correspondant à votre ville grace au site weather.com \n -i,--images pour définir le dossier ou se trouve le pack d\'image \n -a,--ajouter pour rajouter dans le cron \n -e,--enlever pour supprimer dans le cron "
def transform_weather_filename(weather,directory_img):
logging.debug(weather)
temps = {"Partly Cloudy":"partly_cloudy","Fair":"fair","Cloudy":"cloudy","Mostly Cloudy":"cloudy","Sunny":"sunny","Hot":"sunny", "Clear":"sunny","Severe Thunderstorms":"storm","Thunderstorms":"storm","Isolated Thunderstorms":"storm","Scattered Thunderstorms":"storm" ,"Thunder Showers":"storm","Thunder":"storm","Tornado":"storm","Tropical":"storm", "Storm":"storm" ,"Hurricane":"storm","Dust":"storm","Snow Flurries":"snow","Light Snow Showers":"snow","Blowing Snow":"snow","Snow":"snow","Snow Showers":"snow","Heavy Snow":"snow","Scattered Snow Showers":"snow","Heavy Snow":"snow","Sleet":"snow","Cold":"snow", "Shower":"shower","Mixed Precipitation":"shower",
"Mixed Rain":"rain" ,"Rain":"rain", "Sleet":"rain","Scattered Showers":"rain","Freezing Rain":"rain","Mixed Rain":"rain", "Hail":"rain","Freezing Drizzle":"fog","Drizzle":"fog","Fog":"fog","Haze":"fog","Smoke":"fog","Blustery":"partly_cloudy","Windy":"partly_cloudy","Showers in the Vicinity":"showers"}
try:
path = os.path.join(directory_img , temps[weather])
except:
path = os.path.join(directory_img ,"snow")
return path
def calculeD(lat1,lon1,lat2,lon2):
R = 6367000
d = 2 * R * asin(sqrt( pow( sin((lon1 - lon2) / 2 ),2) + cos(lon1) * cos(lon2) * pow( sin((lat1 -lat2)/2),2)))
return d
def calcule_distance(lon1,lat1):
lat1 = radians(float(lat1))
lon1 = radians(float(lon1))
listville = []
for numeroLigne,ligne in enumerate(open(os.path.join(sys.path[0],"liste-ville"),'r').xreadlines()):
try:
lat2 = radians(float(ligne.split(":")[3]))
lon2 = radians(float(ligne.split(":")[4]))
except:
pass
d = calculeD(lat1,lon1,lat2,lon2)
turple = (ligne.split(":")[0:2],d)
listville.extend([turple])
listville.sort(lambda a,b : cmp (a[1],b[1]))
return listville[0]
def main(refcity,dir_xml,dir_img):
#Récupération des donné
meteo = Weather(refcity).w_today()
#Relation entre condition métérologique et nom du fichier
fileimage = transform_weather_filename(meteo,dir_img)
#Génération du fichier xml
doc = CreateXml(fileimage).doc
#Enregistrement dans le fichier background.xml
f = open(os.path.join(dir_xml,'newbackground.xml'), 'w')
f.write(doc.toxml())
f.close()
#Classe permettant le modication du cron
class ToolCron():
def __init__(self):
self.crontab = commands.getoutput("crontab -l")
def status(self,programme):
result = "\n".join([ em for em in self.crontab.split('\n') if re.search(programme,em)])
return result
def add(self,newcron):
f = file("/tmp/cron","w")
result = self.crontab +'\n' + newcron
f.write(result)
f.close()
commands.getoutput('crontab /tmp/cron')
self.crontab = commands.getoutput("crontab -l")
def delete(self,programme):
result = "\n".join([ em for em in self.crontab.split('\n') if re.search(programme,em) == None])
f = file("/tmp/cron","w")
f.write(result)
f.close()
commands.getoutput('crontab /tmp/cron')
self.crontab = commands.getoutput("crontab -l")
def replace(self,programme,newcron):
self.delete(programme)
logging.debug("delete cron :" + filename)
self.add(newcron)
logging.debug("add cron :" + newcron)
#Classe générant le document xml
class CreateXml():
def __init__(self,path):
self.doc = Document()
# Creation de la balise background
self._background = self.doc.createElement("background")
self.doc.appendChild(self._background)
# Creation de la balise starttime
self._starttime = self.doc.createElement("starttime")
self._background.appendChild(self._starttime)
# Creation des noeuds de startime
self._createN(self._starttime,"year","2007")
self._createN(self._starttime,"month","09")
self._createN(self._starttime,"days","26")
self._createN(self._starttime,"hour","07")
self._createN(self._starttime,"minute","00")
self._createN(self._starttime,"second","00")
# We start with sunrise at 7 AM. It will remain up for 1 hour.
self._createNStatic("3600", path + "1.jpg")
# Sunrise starts to transition to day at 8 AM. The transition lasts for 5 hours, ending at 1 PM.
self._createNTransition("18000",path + "1.jpg",path + "2.jpg")
#It's 1 PM, we're showing the day image in full force now, for 2 hours ending at 3 PM.
self._createNStatic("7200", path + "2.jpg")
# It's 3 PM, and we're starting to transition to sunset. Transition completes at 6 PM. -->
self._createNTransition("10800",path + "2.jpg",path +"3.jpg")
# It's 6 PM, and it's sunset, for an hour. Ends at 7. -->
self._createNStatic("3600", path + "3.jpg")
#It's 7 PM and it's going to start to get darker. This will transition for 3 hours up until 10pm. -->
self._createNTransition("10800",path + "3.jpg",path + "4.jpg")
# It's 10pm. It'll stay dark for 7 hours up until 5 AM. -->
self._createNStatic("25200", path + "4.jpg")
#It's 5 AM. We'll start transitioning to sunrise for 2 hours up until 7 AM. -->
self._createNTransition("7200",path + "4.jpg",path + "1.jpg")
def _createNoeud(self,nom):
noeud = self.doc.createElement(nom)
return noeud
def _createN(self,pere,fils,valeur=""):
fils = self._createNoeud(fils)
texte = self.doc.createTextNode(valeur)
fils.appendChild(texte)
pere.appendChild(fils)
def _createNStatic(self,durer,fichier):
static = self.doc.createElement("static")
self._background.appendChild(static)
self._createN(static,"duration",durer)
self._createN(static,"file",fichier)
def _createNTransition(self,durer,fichier1,fichier2,mode="overlay"):
transition = self.doc.createElement("transition")
transition.setAttribute("type", mode)
self._background.appendChild(transition)
self._createN(transition,"duration",durer)
self._createN(transition,"from",fichier1)
self._createN(transition,"to",fichier2)
#Récupération des donné méterologique à partir du site weather.com
class Weather():
def __init__(self,refcity,nb_day = '4'):
self.error = [0,"Problem of connexion with weather.com",'Invalid location provided.','No location provided.']
try:
self.meteoxml = urllib.urlopen('http://xoap.weather.com/weather/local/'+ refcity +'?cc=*&unit=m&dayf=' + nb_day)
except (IOError, OSError):
self.error[0] = 1
sys.exit(2)
self.document = minidom.parse(self.meteoxml)
self.meteoxml.close()
try:
if self._recup([('error','0'),('err','0'),'0']) == u'Invalid location provided.':
self.error[0] = 2
elif self._recup([('error','0'),('err','0'),'0']) == u'No location provided.':
self.error[0] = 3
except:
pass
def _recup(self,data_for_parse):
parse = 'self.document.' + "".join([ """getElementsByTagName('%s')[%s].""" % (k,v) for k,v in data_for_parse[:-1]]) + 'childNodes[%s].nodeValue' % data_for_parse[-1]
result = eval(parse)
return result
def w_today(self):
result = self._recup([('cc','0'),('t','0'),'0'])
return result
def moon(self):
result = self._recup([('cc','0'),('moon','0'),('t','0'),'0'])
return result
def w_day(self,nb_day,d_or_n):
#nb_day donne la météo x jour aprés la date actuel
#d_or_n météo du jour 0 méteo de nuit 1
result = self._recup([('dayf','0'),('day',nb_day),('part',d_or_n),('t','0'),'0'])
return result
def city(self):
result = self._recup([('loc','0'),('dnam','0'),'0']).split(",")[0]
return result
def country(self):
result = self._recup([('loc','0'),('dnam','0'),'0']).split(",")[1]
return result
def lon(self):
result = self._recup([('loc','0'),('lon','0'),'0'])
return result
def lat(self):
result = self._recup([('loc','0'),('lat','0'),'0'])
return result
if __name__ == '__main__':
try:
opts, args = getopt.getopt(sys.argv[1:], "haev:i:x:", ["help","ajouter","enlever","ville=","images=","xml="])
except getopt.error,err:
usage()
sys.exit(2)
for opt, arg in opts:
if opt in ("-h","--help"):
usage()
sys.exit(2)
elif opt in ("-a","--ajouter"):
cron = 1
elif opt in ("-e","--enlever"):
cron = 2
elif opt in ("-v","--ville"):
refcity = arg
elif opt in ("-i","--images"):
dir_img = arg
elif opt in ("-x","--xml"):
dir_xml = arg
#Enregistrement ou suppression dans le cron
if cron == 3:#laisser en l'état
pass
elif cron == 1:#enregistrement dans le crontab
objetcron = ToolCron()
lignecron = " ".join([ em for em in sys.argv[1:] if (em in ( '-a','--ajouter','-e','--enlever','-h','--help')) == False ])
crontab = objetcron.crontab + "\n*/15 * * * * "+ sys.executable +" "+ os.path.join(fileprog,sys.argv[0]) +" "+ lignecron +"\n"
print "Rajouter la ligne suivante dans votre crontab \n*/15 * * * * "+ sys.executable +" "+ os.path.join(fileprog,sys.argv[0]) +" "+ lignecron + "?\n Taper Yes ou No pour valider"
resultat = raw_input()
if resultat.lower() == 'yes':
objetcron.replace("background",crontab)
print 'Crontab modifié'
else :
sys.exit(2)
elif cron == 2: #suppresion dans le crontab
ToolCron().delete("background")
print "Cron de "+sys.argv[0]+ " enlevé"
sys.exit(2)
main(refcity,dir_xml,dir_img)