2010-06-26 16 views
2

Ceci est ma première question.Le répertoire de travail de howoto fix est toujours à la maison? (python)

Mon script python ouvre et lit à partir d'un fichier texte actuel en utilisant la fonct simple:

open("config.ini", "r") 

Comme il est un chemin relatif, il est censé fonctionner parce que config.ini est placé dans le même répertoire comme le script est quand il est lancé, cela devrait être le répertoire de travail actuel.

En fait, cela fonctionne parfaitement sur toutes mes 3 boîtes Linux, mais j'ai un utilisateur qui demande le support car il obtient une erreur lors de l'ouverture de config.ini. L'erreur augmente car

os.path.exists("config.ini") 

renvoie la valeur false même si le fichier est présent!

En essayant de résoudre ce problème, nous avons découvert que la seule façon de le faire fonctionner est de placer config.ini dans son répertoire personnel, même si le répertoire de travail supposé en est un autre.

De plus, si mon script essaye de créer un fichier dans le répertoire de travail actuel, le fichier est toujours créé dans son répertoire personnel, et donc je pense que son répertoire de travail est toujours à la maison!

Comment puis-je résoudre ce problème? Peut-être que je pourrais introduire des chemins absolus, mais j'ai peur que os.getcwd() renvoie le homedir au lieu du bon.

Dois-je suggérer à cet utilisateur de réparer sa machine d'une manière ou d'une autre?

Désolé pour cette longue question mais l'anglais n'est pas ma langue maternelle et je suis un débutant dans le codage, donc j'ai quelques difficultés à expliquer.

Merci beaucoup d'avance! =)

Répondre

5

Se pourrait-il que l'utilisateur exécute votre script depuis son répertoire personnel?

I.e. supposons que le script est:

/home/user/test/foo/foo.py 

Mais l'utilisateur appelle ainsi:

/home/user> python test/foo/foo.py 

Dans ce cas, le "répertoire courant" le script voit est /home/user.

Ce que vous pouvez faire est de trouver le répertoire réside le script lui-même en appelant cette fonction:

import os 

def script_dir(): 
    return os.path.dirname(os.path.realpath(__file__)) 

Il retournera toujours le répertoire dans lequel vit le script, pas le répertoire courant qui peut être différent . Vous pouvez ensuite y stocker votre fichier de configuration en toute sécurité.

+0

Vous avez raison !! En fait, j'ai demandé à l'utilisateur et a découvert qu'il appelait le script comme: /home/utilisateur> test python/foo/foo.py Ce que je devrais avoir deviné aussi, en effet! Votre réponse, avec celle d'unubtu, sera vraiment utile pour éviter de tels problèmes dans le futur !! =) Merci beaucoup !! Bravo! – sblanzio

0

Dans le même sens que la suggestion d'Eli Bendersky, vous voudrez peut-être essayer:

os.path.exists(os.path.join(sys.path[0],"config.ini")) 

depuis sys.path[0] devrait toujours être le répertoire dans lequel se trouve le script.

+0

Merci beaucoup !! =) – sblanzio