Voil=E0 je d=E9bute en python je viens de terminer les le=E7on du cours Rur-
ple ( http://rur-ple.sourceforge.net/en/rur.htm ) tr=E8s instructif on
y apprend en s'amusant des trucs comme -
- def , if , else elif , pass , not while , from and import object
oriented programing , tulpe , global , list , append , pop ,
dictionnary , str , int , class , del , return , for .. in , for ...
in .. range()
, join , len , designing new class , designing new class for change
the base of an existing class : __init__ , from 'module' import
'fonction' , from 'module' import * (all function of that module ) ,
try
,-
M=EAme si je maitrise pas encore tout :) La premier programme que je
souhaite faire est un inutilitaire qui m'a bien fait rire il y a
quelque ann=E9es mais dont j'ai pas encore vue l'=E9quivalent en sous
Linux . Ce soft a pour but simplement diff=E9rent sons pr=E9d=E9finie
(Ahh , Ohh , Wow .. ) lors qu'on clique sur un bouton . Rien de bien
sorcier j'ai commencer =E0 faire l'interface en TK , et voila lorsque
j'essaye de lui faire lire un sons (wav ou ogg ) rien ne sort . J'ai
test=E9 diff=E9rent module pyogg , pyvorbis , puis j'ai test=E9 libsnack
( http://www.speech.kth.se/snack/) . Il semblerait lorsque je lance
les commande dans le prompt cela le lit (en ouvrant xmms en meme temps
je n'ai pas de sons car /dev/dsp occup=E9 ) , sinon lorsque je lance le
script il me donne une erreur de syntaxe : soundtest():^
SyntaxError: invalid syntax
Script terminated. , voici mon code :
Au fait comment est ce que je peux lister toute les fonctions d'un module en python ?
import string dir(string)
merci
voila j'ai quasi fini le soft , reste juste quelque détails :
j'aimerais à la fois mettre les wav dans un répértoire , séparer du script . et à la fois que le script puisse s'éxecuter autant sous Linux que windows et Mac os x .
le problème vient du fait que la syntaxe des répértoire diffère sous windows de Linux et Mac os x .(slash et backslash ) .
En général je fais quelque chose comme ça personnellement :
Ca me permet de gérer facilement mes scripts sous linux et windows.
Si tu veux avoir des chenmins véritablement absolus, tu peux utiliser sys.platform pour gérer des chemins différents suivant les os.
j'aimerais mettre un bouton exit en tout en dessous , j'avais créer une nouvelle frame , mais le bouton se met toujours a coté . (right) au lieu d en bas bien que j'ai defini la nouvelle frame avec side > BOTTOM
quelqu'un a t-il déjà utilisé Py2exe ? pour transformer un py en .exe
oui, ça marche bien mais produit des applications un peu grosses en taille.
même chose pour Mac os x ( Py2app )
Même chose pour Linux (pour gerer les dependance ) autopackage peut etre ?
je le gère avec distutils pour créer une install propre. Je préfère laisser la responsabilité à l'utilisateur d'installer les modules recquis, principalement pour des questions de licences.
# frame pour accueillir le bouton exit f3 = Frame(fen, width5, heightP )
f3.pack(side = BOTTOM)
# def Cool , encore besoin du code pour l exit bou9=Button(f3, text='exit', command=Cool) bou9.pack(side = BOTTOM)
root.mainloop()
firelink.east@gmail.com wrote:
On 23 août, 13:30, Jerome <jer...@nospam.com> wrote:
Bonjour
-snip-
firelink.e...@gmail.com wrote:
Au fait comment est ce que je peux lister
toute les fonctions d'un module en python ?
import string
dir(string)
merci
voila j'ai quasi fini le soft , reste juste quelque détails :
j'aimerais à la fois mettre les wav dans un répértoire , séparer du
script . et à la fois que le script puisse s'éxecuter autant sous
Linux que windows et Mac os x .
le problème vient du fait que la syntaxe des répértoire diffère sous
windows de Linux et Mac os x .(slash et backslash ) .
En général je fais quelque chose comme ça personnellement :
Ca me permet de gérer facilement mes scripts sous linux et windows.
Si tu veux avoir des chenmins véritablement absolus, tu peux utiliser
sys.platform pour gérer des chemins différents suivant les os.
j'aimerais mettre un bouton exit en tout en dessous , j'avais créer
une nouvelle frame , mais le bouton se met toujours a coté . (right)
au lieu d en bas bien que j'ai defini la nouvelle frame avec side > BOTTOM
quelqu'un a t-il déjà utilisé Py2exe ? pour transformer un py
en .exe
oui, ça marche bien mais produit des applications un peu grosses en taille.
même chose pour Mac os x ( Py2app )
Même chose pour Linux (pour gerer les dependance ) autopackage peut
etre ?
je le gère avec distutils pour créer une install propre. Je préfère
laisser la responsabilité à l'utilisateur d'installer les modules
recquis, principalement pour des questions de licences.
Au fait comment est ce que je peux lister toute les fonctions d'un module en python ?
import string dir(string)
merci
voila j'ai quasi fini le soft , reste juste quelque détails :
j'aimerais à la fois mettre les wav dans un répértoire , séparer du script . et à la fois que le script puisse s'éxecuter autant sous Linux que windows et Mac os x .
le problème vient du fait que la syntaxe des répértoire diffère sous windows de Linux et Mac os x .(slash et backslash ) .
En général je fais quelque chose comme ça personnellement :
Ca me permet de gérer facilement mes scripts sous linux et windows.
Si tu veux avoir des chenmins véritablement absolus, tu peux utiliser sys.platform pour gérer des chemins différents suivant les os.
j'aimerais mettre un bouton exit en tout en dessous , j'avais créer une nouvelle frame , mais le bouton se met toujours a coté . (right) au lieu d en bas bien que j'ai defini la nouvelle frame avec side > BOTTOM
quelqu'un a t-il déjà utilisé Py2exe ? pour transformer un py en .exe
oui, ça marche bien mais produit des applications un peu grosses en taille.
même chose pour Mac os x ( Py2app )
Même chose pour Linux (pour gerer les dependance ) autopackage peut etre ?
je le gère avec distutils pour créer une install propre. Je préfère laisser la responsabilité à l'utilisateur d'installer les modules recquis, principalement pour des questions de licences.
A part qu'il manque une parenthèse fermante - merci de faire un copier/coller du *vrai* code, et pas de le réécrire... -, le comportement que tu vois est tout à fait normal: quand tu crées le bouton, tu *appelles* la fonction playsound en lui passant les paramètres path_sound et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option command du bouton. Vu que la fonction ne renvoie probablement rien, donc None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound étant appelée, le son est joué à la création du bouton.
Pour faire ce que tu veux, il faut:
- Soit faire une fonction par son à jouer, sans paramètre, et passer le nom de la fonction *sans parenthèses* à l'option command du bouton. Exemple: def playAaah(): playsound(path_sound, Aaah) bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah)
- Soit utiliser lambda: bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: playsound(path_sound , Aaah)) Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, le lambda ne voit que les définitions globales, pas les locales)
- Soit utiliser les possibilités des dernières versions de Python pour la programmation fonctionnelle. Etant scotché avec un Python 2.1, je ne connais pas bien; je préfère que d'autres expliquent...
HTH -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
On Fri, 24 Aug 2007 14:27:21 +0200, <firelink.east@gmail.com> wrote:
[snip]
lorsque je met le code , le son se joue dès le lancement , et
lorsqu'on click sur le bouton il ne se joue pas du tout
A part qu'il manque une parenthèse fermante - merci de faire un
copier/coller du *vrai* code, et pas de le réécrire... -, le comportement
que tu vois est tout à fait normal: quand tu crées le bouton, tu
*appelles* la fonction playsound en lui passant les paramètres path_sound
et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option
command du bouton. Vu que la fonction ne renvoie probablement rien, donc
None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound
étant appelée, le son est joué à la création du bouton.
Pour faire ce que tu veux, il faut:
- Soit faire une fonction par son à jouer, sans paramètre, et passer le
nom de la fonction *sans parenthèses* à l'option command du bouton.
Exemple:
def playAaah():
playsound(path_sound, Aaah)
bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah)
- Soit utiliser lambda:
bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda:
playsound(path_sound , Aaah))
Attention: ça pose souvent des problèmes d'espace de noms (grosso modo,
le lambda ne voit que les définitions globales, pas les locales)
- Soit utiliser les possibilités des dernières versions de Python pour la
programmation fonctionnelle. Etant scotché avec un Python 2.1, je ne
connais pas bien; je préfère que d'autres expliquent...
HTH
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
A part qu'il manque une parenthèse fermante - merci de faire un copier/coller du *vrai* code, et pas de le réécrire... -, le comportement que tu vois est tout à fait normal: quand tu crées le bouton, tu *appelles* la fonction playsound en lui passant les paramètres path_sound et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option command du bouton. Vu que la fonction ne renvoie probablement rien, donc None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound étant appelée, le son est joué à la création du bouton.
Pour faire ce que tu veux, il faut:
- Soit faire une fonction par son à jouer, sans paramètre, et passer le nom de la fonction *sans parenthèses* à l'option command du bouton. Exemple: def playAaah(): playsound(path_sound, Aaah) bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah)
- Soit utiliser lambda: bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: playsound(path_sound , Aaah)) Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, le lambda ne voit que les définitions globales, pas les locales)
- Soit utiliser les possibilités des dernières versions de Python pour la programmation fonctionnelle. Etant scotché avec un Python 2.1, je ne connais pas bien; je préfère que d'autres expliquent...
HTH -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
Jerome
wrote:
En général je fais quelque chose comme ça personnellement :
pas tout saisi le point ne désigne pas un répértoire caché ? sans point cela désignerait la racine ..
le point désigne le répertoire courant mais c'est surtout une syntaxe que je suis, j'aurais tout aussi bien pu mettre 'local://' à la place.
En gros tu peux définir tes chemins localement par rapport à l'emplacement du script que tu lances et remplacer ce '.' par le 'sys.path[0]'. Cela te donne un chemin global correct que tu peux utiliser pendant toute l'exécution du programme.
firelink.east@gmail.com wrote:
En général je fais quelque chose comme ça personnellement :
pas tout saisi le point ne désigne pas un répértoire caché ? sans
point cela désignerait la racine ..
le point désigne le répertoire courant mais c'est surtout une syntaxe
que je suis, j'aurais tout aussi bien pu mettre 'local://' à la place.
En gros tu peux définir tes chemins localement par rapport à
l'emplacement du script que tu lances et remplacer ce '.' par le
'sys.path[0]'. Cela te donne un chemin global correct que tu peux
utiliser pendant toute l'exécution du programme.
pas tout saisi le point ne désigne pas un répértoire caché ? sans point cela désignerait la racine ..
le point désigne le répertoire courant mais c'est surtout une syntaxe que je suis, j'aurais tout aussi bien pu mettre 'local://' à la place.
En gros tu peux définir tes chemins localement par rapport à l'emplacement du script que tu lances et remplacer ce '.' par le 'sys.path[0]'. Cela te donne un chemin global correct que tu peux utiliser pendant toute l'exécution du programme.
firelink.east
On 24 août, 14:40, "Eric Brunel" wrote:
On Fri, 24 Aug 2007 14:27:21 +0200, wrote:
[snip]
lorsque je met le code , le son se joue dès le lancement , et lorsqu'on click sur le bouton il ne se joue pas du tout
A part qu'il manque une parenthèse fermante - merci de faire un copier/coller du *vrai* code, et pas de le réécrire... -,
c'est un mauvais copier / coller vers le newsgroup , les parenthèses y sont dans le code ..
le comportement
que tu vois est tout à fait normal: quand tu crées le bouton, tu *appelles* la fonction playsound en lui passant les paramètres path_sou nd et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'op tion command du bouton. Vu que la fonction ne renvoie probablement rien, donc None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound étant appelée, le son est joué à la création du bouton.
Pour faire ce que tu veux, il faut:
- Soit faire une fonction par son à jouer, sans paramètre, et passer le nom de la fonction *sans parenthèses* à l'option command du bouton. Exemple: def playAaah(): playsound(path_sound, Aaah) bou1=Button(f1, width =6,height=1,text='Aaah',command=playAa ah)
c'est quasi identique au code de départ mis à part le path_sound definie avant non ?
- Soit utiliser lambda: bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: playsound(path_sound , Aaah))
Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, le lambda ne voit que les définitions globales, pas les locales) alors j'ai ajouter :
global Aaahh
ainsi que le code lambda , il me dit que Aaahh n'est pas définit ..
On 24 août, 14:40, "Eric Brunel" <see.signat...@no.spam> wrote:
On Fri, 24 Aug 2007 14:27:21 +0200, <firelink.e...@gmail.com> wrote:
[snip]
lorsque je met le code , le son se joue dès le lancement , et
lorsqu'on click sur le bouton il ne se joue pas du tout
A part qu'il manque une parenthèse fermante - merci de faire un
copier/coller du *vrai* code, et pas de le réécrire... -,
c'est un mauvais copier / coller vers le newsgroup , les parenthèses y
sont dans le code ..
le comportement
que tu vois est tout à fait normal: quand tu crées le bouton, tu
*appelles* la fonction playsound en lui passant les paramètres path_sou nd
et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'op tion
command du bouton. Vu que la fonction ne renvoie probablement rien, donc
None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound
étant appelée, le son est joué à la création du bouton.
Pour faire ce que tu veux, il faut:
- Soit faire une fonction par son à jouer, sans paramètre, et passer le
nom de la fonction *sans parenthèses* à l'option command du bouton.
Exemple:
def playAaah():
playsound(path_sound, Aaah)
bou1=Button(f1, width =6,height=1,text='Aaah',command=playAa ah)
c'est quasi identique au code de départ mis à part le path_sound
definie avant non ?
- Soit utiliser lambda:
bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda:
playsound(path_sound , Aaah))
Attention: ça pose souvent des problèmes d'espace de noms (grosso modo,
le lambda ne voit que les définitions globales, pas les locales)
alors j'ai ajouter :
global Aaahh
ainsi que le code lambda , il me dit que Aaahh n'est pas définit ..
A part qu'il manque une parenthèse fermante - merci de faire un copier/coller du *vrai* code, et pas de le réécrire... -,
c'est un mauvais copier / coller vers le newsgroup , les parenthèses y sont dans le code ..
le comportement
que tu vois est tout à fait normal: quand tu crées le bouton, tu *appelles* la fonction playsound en lui passant les paramètres path_sou nd et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'op tion command du bouton. Vu que la fonction ne renvoie probablement rien, donc None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound étant appelée, le son est joué à la création du bouton.
Pour faire ce que tu veux, il faut:
- Soit faire une fonction par son à jouer, sans paramètre, et passer le nom de la fonction *sans parenthèses* à l'option command du bouton. Exemple: def playAaah(): playsound(path_sound, Aaah) bou1=Button(f1, width =6,height=1,text='Aaah',command=playAa ah)
c'est quasi identique au code de départ mis à part le path_sound definie avant non ?
- Soit utiliser lambda: bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: playsound(path_sound , Aaah))
Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, le lambda ne voit que les définitions globales, pas les locales) alors j'ai ajouter :
global Aaahh
ainsi que le code lambda , il me dit que Aaahh n'est pas définit ..
Jerome
wrote:
On 24 août, 14:40, "Eric Brunel" wrote:
On Fri, 24 Aug 2007 14:27:21 +0200, wrote:
[snip]
lorsque je met le code , le son se joue dès le lancement , et lorsqu'on click sur le bouton il ne se joue pas du tout par exemple : root.title("Foule controle") root.geometry("157x138") f1 = Frame(root, widthx , height= 138, bg="",bd=4 ) f1.pack(side = LEFT) bou1=Button(f1, width =6,height=1, text='Aaah',command=playsound(path_sound , Aaah) A part qu'il manque une parenthèse fermante - merci de faire un
copier/coller du *vrai* code, et pas de le réécrire... -,
c'est un mauvais copier / coller vers le newsgroup , les parenthèses y sont dans le code ..
le comportement
que tu vois est tout à fait normal: quand tu crées le bouton, tu *appelles* la fonction playsound en lui passant les paramètres path_sound et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option command du bouton. Vu que la fonction ne renvoie probablement rien, donc None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound étant appelée, le son est joué à la création du bouton.
Pour faire ce que tu veux, il faut:
- Soit faire une fonction par son à jouer, sans paramètre, et passer le nom de la fonction *sans parenthèses* à l'option command du bouton. Exemple: def playAaah(): playsound(path_sound, Aaah) bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah)
c'est quasi identique au code de départ mis à part le path_sound definie avant non ?
Si tu fais comme ça oui. Mais tu limites les erreurs de copier/coller (cf ta fonction Cool dans ton post précédent :) )
- Soit utiliser lambda: bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: playsound(path_sound , Aaah))
Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, le lambda ne voit que les définitions globales, pas les locales) alors j'ai ajouter :
global Aaahh
ainsi que le code lambda , il me dit que Aaahh n'est pas définit ..
global c'est le mal...
Avec le code que je t'ai proposé tu dois faire plutôt :
On 24 août, 14:40, "Eric Brunel" <see.signat...@no.spam> wrote:
On Fri, 24 Aug 2007 14:27:21 +0200, <firelink.e...@gmail.com> wrote:
[snip]
lorsque je met le code , le son se joue dès le lancement , et
lorsqu'on click sur le bouton il ne se joue pas du tout
par exemple :
root.title("Foule controle")
root.geometry("157x138")
f1 = Frame(root, widthx , height= 138, bg="",bd=4 )
f1.pack(side = LEFT)
bou1=Button(f1, width =6,height=1,
text='Aaah',command=playsound(path_sound , Aaah)
A part qu'il manque une parenthèse fermante - merci de faire un
copier/coller du *vrai* code, et pas de le réécrire... -,
c'est un mauvais copier / coller vers le newsgroup , les parenthèses y
sont dans le code ..
le comportement
que tu vois est tout à fait normal: quand tu crées le bouton, tu
*appelles* la fonction playsound en lui passant les paramètres path_sound
et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option
command du bouton. Vu que la fonction ne renvoie probablement rien, donc
None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound
étant appelée, le son est joué à la création du bouton.
Pour faire ce que tu veux, il faut:
- Soit faire une fonction par son à jouer, sans paramètre, et passer le
nom de la fonction *sans parenthèses* à l'option command du bouton.
Exemple:
def playAaah():
playsound(path_sound, Aaah)
bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah)
c'est quasi identique au code de départ mis à part le path_sound
definie avant non ?
Si tu fais comme ça oui. Mais tu limites les erreurs de copier/coller
(cf ta fonction Cool dans ton post précédent :) )
- Soit utiliser lambda:
bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda:
playsound(path_sound , Aaah))
Attention: ça pose souvent des problèmes d'espace de noms (grosso modo,
le lambda ne voit que les définitions globales, pas les locales)
alors j'ai ajouter :
global Aaahh
ainsi que le code lambda , il me dit que Aaahh n'est pas définit ..
global c'est le mal...
Avec le code que je t'ai proposé tu dois faire plutôt :
lorsque je met le code , le son se joue dès le lancement , et lorsqu'on click sur le bouton il ne se joue pas du tout par exemple : root.title("Foule controle") root.geometry("157x138") f1 = Frame(root, widthx , height= 138, bg="",bd=4 ) f1.pack(side = LEFT) bou1=Button(f1, width =6,height=1, text='Aaah',command=playsound(path_sound , Aaah) A part qu'il manque une parenthèse fermante - merci de faire un
copier/coller du *vrai* code, et pas de le réécrire... -,
c'est un mauvais copier / coller vers le newsgroup , les parenthèses y sont dans le code ..
le comportement
que tu vois est tout à fait normal: quand tu crées le bouton, tu *appelles* la fonction playsound en lui passant les paramètres path_sound et Aaah, puis tu affectes la valeur *renvoyée* par la fonction à l'option command du bouton. Vu que la fonction ne renvoie probablement rien, donc None, tu as un bouton qui ne fait rien. Par contre, la fonction playsound étant appelée, le son est joué à la création du bouton.
Pour faire ce que tu veux, il faut:
- Soit faire une fonction par son à jouer, sans paramètre, et passer le nom de la fonction *sans parenthèses* à l'option command du bouton. Exemple: def playAaah(): playsound(path_sound, Aaah) bou1=Button(f1, width =6,height=1,text='Aaah',command=playAaah)
c'est quasi identique au code de départ mis à part le path_sound definie avant non ?
Si tu fais comme ça oui. Mais tu limites les erreurs de copier/coller (cf ta fonction Cool dans ton post précédent :) )
- Soit utiliser lambda: bou1=Button(f1, width =6,height=1,text='Aaah',command=lambda: playsound(path_sound , Aaah))
Attention: ça pose souvent des problèmes d'espace de noms (grosso modo, le lambda ne voit que les définitions globales, pas les locales) alors j'ai ajouter :
global Aaahh
ainsi que le code lambda , il me dit que Aaahh n'est pas définit ..
global c'est le mal...
Avec le code que je t'ai proposé tu dois faire plutôt :
pas tout saisi le point ne désigne pas un répértoire caché ? sans point cela désignerait la racine ..
le point désigne le répertoire courant mais c'est surtout une syntaxe que je suis, j'aurais tout aussi bien pu mettre 'local://' à la place.
En gros tu peux définir tes chemins localement par rapport à l'emplacement du script que tu lances et remplacer ce '.' par le 'sys.path[0]'. Cela te donne un chemin global correct que tu peux utiliser pendant toute l'exécution du programme.
modulo qu'il ne modifie pas le répertoire courant au cours de l'exécution... il vaut mieux utiliser dès l'initialisation du script abspath() pour transformer le répertoire relatif en répertoire absolu et être tranquille par la suite.
Voir aussi la variable __file__ qui contient le nom du fichier module courant (je la préfère à sys.argv[0]).
Enfin, comme ça a déjà été dit, préférer de loin l'utilisation des fonctions join, split, basename, dirname... du module os.path plutôt que de faire des concaténations de . / à la mano. C'est plus portable, plus propre, et moins sujet à erreurs. Cf http://docs.python.org/lib/module-os.path.html
A+
Laurent.
firelink.east@gmail.com wrote:
En général je fais quelque chose comme ça personnellement :
pas tout saisi le point ne désigne pas un répértoire caché ? sans
point cela désignerait la racine ..
le point désigne le répertoire courant mais c'est surtout une syntaxe
que je suis, j'aurais tout aussi bien pu mettre 'local://' à la place.
En gros tu peux définir tes chemins localement par rapport à
l'emplacement du script que tu lances et remplacer ce '.' par le
'sys.path[0]'. Cela te donne un chemin global correct que tu peux
utiliser pendant toute l'exécution du programme.
modulo qu'il ne modifie pas le répertoire courant au cours de
l'exécution... il vaut mieux utiliser dès l'initialisation du script
abspath() pour transformer le répertoire relatif en répertoire absolu et
être tranquille par la suite.
Voir aussi la variable __file__ qui contient le nom du fichier module
courant (je la préfère à sys.argv[0]).
Enfin, comme ça a déjà été dit, préférer de loin l'utilisation des
fonctions join, split, basename, dirname... du module os.path plutôt que
de faire des concaténations de . / à la mano. C'est plus portable,
plus propre, et moins sujet à erreurs.
Cf http://docs.python.org/lib/module-os.path.html
pas tout saisi le point ne désigne pas un répértoire caché ? sans point cela désignerait la racine ..
le point désigne le répertoire courant mais c'est surtout une syntaxe que je suis, j'aurais tout aussi bien pu mettre 'local://' à la place.
En gros tu peux définir tes chemins localement par rapport à l'emplacement du script que tu lances et remplacer ce '.' par le 'sys.path[0]'. Cela te donne un chemin global correct que tu peux utiliser pendant toute l'exécution du programme.
modulo qu'il ne modifie pas le répertoire courant au cours de l'exécution... il vaut mieux utiliser dès l'initialisation du script abspath() pour transformer le répertoire relatif en répertoire absolu et être tranquille par la suite.
Voir aussi la variable __file__ qui contient le nom du fichier module courant (je la préfère à sys.argv[0]).
Enfin, comme ça a déjà été dit, préférer de loin l'utilisation des fonctions join, split, basename, dirname... du module os.path plutôt que de faire des concaténations de . / à la mano. C'est plus portable, plus propre, et moins sujet à erreurs. Cf http://docs.python.org/lib/module-os.path.html