Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/11/2011, 20h48   #1
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Par défaut Problème python dans script shell et cron

Bonjour,
je ne sais pas si je suis au bon endroit mais voilà, je suis coincé sur un point et mon ami google ne m'a pas apporté beaucoup de réponses.
J'ai créer un script shell "met.sh" dans lequel se trouve des lignes où je lance des scripts python.
Quand j'exécute dans ma console le script :
Tout fonctionne.
Bon, le problème vient quand je veux l’exécuter automatiquement par cron : tout le script fonctionne SAUF le lancement des scripts python !
Voici un bout de mon script :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
...
 
#Récupération des températures
/usr/bin/php5 /home/valentin/appli/test/donnee/Temp.php
/usr/bin/php5 /home/valentin/appli/test/donnee/buoy.php
 
#execution du script pyhton
/usr/bin/python /home/valentin/appli/python/Temperature.py
/usr/bin/python /home/valentin/appli/python/Dewpoint.py
/usr/bin/python /home/valentin/appli/python/Pression.py
/usr/bin/python /home/valentin/appli/python/ventbarbule.py
/usr/bin/python /home/valentin/appli/python/ventisobare.py
/usr/bin/python /home/valentin/appli/python/Humidex.py
/usr/bin/python /home/valentin/appli/python/Humidite.py
/usr/bin/python /home/valentin/appli/python/Windchill.py
...
et voici ma ligne crontab
Code :
05,35 * * * * /home/valentin/appli/test/donnee/met.sh
J'ai remarqué également que si je mettais également mes scripts pythons dans crontab, ça ne marchais pas non plus.
D'où vient la faille ?

Merci
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 14/11/2011, 22h05   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

au pif : dans les scripts en python, des chemins ne sont pas complets

?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/11/2011, 22h21   #3
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Bonsoir,
merci de te soucier de mon problème ,
je crois que les chemins sont correctement écrits :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/python
# -*- coding: utf-8 -*-
from mpl_toolkits.basemap import Basemap, cm
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
from scipy.interpolate import griddata
import numpy as np
import codecs
x=[]
y=[]
z=[]
#import des données
Fichier = '/home/valentin/appli/test/donnee/temperature.txt' 
Table=np.loadtxt(Fichier)
Table=np.array(Table)
for i in range((len(Table))): 
    x.append(Table[i][1]) # coord x
    y.append(Table[i][2]) # coord y
    z.append(Table[i][0]) # carte de température
 
#date et heure de la carte
jour=np.str(np.int(Table[1,3]))
mois=np.str(np.int(Table[1,4]))
annee=np.str(np.int(Table[1,5]))
heure=np.str(np.int(Table[1,6]))
minute=np.str(np.int(Table[1,7]))
if minute == "0":
 minute="00"
lon=np.array(x)
lat=np.array(y)
z=np.array(z) 
zint=[]
for i in range((len(z))):
    zint.append(int(z[i]))
#Création de la carte de France
...
#Lecture shapefile
shp='/home/valentin/modeles/wrfems/util/grads/data/FRA_adm2'
m.readshapefile(shp,'departement')
...
 
plt.savefig('/home/valentin/appli/web/cartesmetar/Francetemperature.png',bbox_inches='tight',dpi=150)
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/11/2011, 23h14   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
malheureusement, je ne connais pas le python.

peut-être des variables d'environnement vers les librairies devraient-elles être exportées depuis les scripts shell, afin qu'elles soient accessibles depuis les scripts en python

?

n'y a-t-il pas moyen, en python, de savoir ce qu'il se passe lors de l'exécution d'un script, comme en shell on utilise set -x ?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/11/2011, 14h55   #5
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Bonjour,
Citation:
peut-être des variables d'environnement vers les librairies devraient-elles être exportées depuis les scripts shell, afin qu'elles soient accessibles depuis les scripts en python
En fait aucun script python ne marche directement avec Cron sur mon PC.
si je fait :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Python 2.7.2+ (default, Oct  4 2011, 20:06:09) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from mpl_toolkits.basemap import Basemap, cm
>>> import matplotlib.pyplot as plt
>>> import matplotlib.colors as mcolors
>>> from scipy.interpolate import griddata
>>> import numpy as np
>>> import codecs
>>> import os
 
>>> os.environ['PATH']
'/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games'
et dans mon shell (ainsi que dans mon fichier CRONTAB) j'ai bien :

Code :
1
2
echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Y-a-til des spécialistes Python ou Crontab dans la salle ?
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/11/2011, 22h07   #6
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Bonsoir,
j'ai essayé de rajouter au début d'un script python ceci :
Code :
1
2
3
import sys
sys.stdout = open("/home/valentin/appli/python/out.txt","w")
sys.stderr = open("/home/valentin/appli/python/err.txt","w")
Je lance mon Cron et j'obtiens mon fichier err.txt. Le voici :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Traceback (most recent call last):
  File "/home/valentin/appli/python/Pression.py", line 40, in <module>
    m.drawcountries(linewidth=1)
  File "/usr/local/lib/python2.7/dist-packages/mpl_toolkits/basemap/__init__.py", line 1535, in drawcountries
    ax = ax or self._check_ax()
  File "/usr/local/lib/python2.7/dist-packages/mpl_toolkits/basemap/__init__.py", line 3689, in _check_ax
    ax = plt.gca()
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 593, in gca
    ax =  gcf().gca(**kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 292, in gcf
    return figure()
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 270, in figure
    **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 80, in new_figure_manager
    window = Tk.Tk()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1688, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
Ça doit être un problème de variable d'environnement ?
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 22h29   #7
Invité régulier
 
Homme
Inscription : août 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 15
Points : 6
Points : 6
Ça y est !!!!!!!!!!!
Je crois avoir trouvé, il suffit de rajouter avant l'appel de pyplot ceci :
Code :
1
2
import matplotlib
matplotlib.use('Agg')
Et le script se lance, il n'y a plus d'erreur.
Voici le lien qui m' a aidé : http://stackoverflow.com/questions/4...nning-x-server
Par contre, aucune idée de ce problème, et c'est bizarre que je semble être le seul dans ce cas ??
Tintin87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h47.


 
 
 
 
Partenaires

Hébergement Web