2013-01-07 3 views
1

StackOverflow,Comment charger un fichier de configuration en fonction du chemin relatif du script en cours d'exécution?

Ci-dessous est les premières lignes de mon script:

from ConfigParser import SafeConfigParser 
from docopt import docopt 
import core as scrappy 

ARGS = docopt(__doc__, version=scrappy.__version__) 
if not ARGS['PATH']: 
    ARGS['PATH'] = './' 

# load config file 
CFG = SafeConfigParser() 
if not CFG.read(ARGS['--cfg']): # call to CFG.read also loads file if it exists 
    raise IOError('Configuration file not found.') 

Le fichier de configuration que je suis en train de lire est dans le même répertoire que le script ci-dessus. Par défaut, docopt définit le chemin d'accès à ce fichier à ./file.conf (j'ai testé cela avec file.conf avec des résultats identiques).

La dernière ligne du script est toujours appelée, ce qui suggère que le fichier est introuvable. J'ai confirmé cela en imprimant la sortie de os.getcwd, qui a révélé que le répertoire d'exécution du script est le répertoire sur lequel le terminal pointait.

Ce qui donne?

Que puis-je faire pour pointer vers le fichier de configuration?

Répondre

1

Utilisez l'attribut prédéfini du module. Comme ceci:

module_dir = os.path.dirname(__file__) 
CFG = SafeConfigParser() 
cfg_full_path = os.path.join(module_dir, ARGS['--cfg']) 
if not CFG.read(cfg_full_path): 
    ... 
+0

Pourquoi devrais-je préférer cette méthode à l'utilisation de 'sys.argv'? Quel est l'avantage? – blz

+0

[ici] (http://stackoverflow.com/a/595317/1929432) ils disent que cela ne fonctionne pas toujours. – kerim

+0

génial! Merci de votre aide! – blz

Questions connexes