2009-11-28 6 views
1

Je travaille sur une série d'outils de ligne de commande qui se connectent au même serveur et font des choses différentes mais liées. J'aimerais que les utilisateurs puissent avoir un seul fichier de configuration où ils peuvent placer des arguments communs tels que des informations de connexion qui peuvent être partagées entre tous les outils. Idéalement, je voudrais quelque chose qui ne la suit pour moi:Traitement (éventuellement) des arguments facultatifs en Python

  1. Si l'adresse du serveur est spécifié à la ligne de commande, utilisez ceci et ignorer toutes les autres valeurs
  2. Si l'adresse du serveur n'est pas spécifié à la commande line mais est dans un fichier de configuration spécifié sur la ligne de commande, utilisez cette adresse. Ignorer toutes les autres valeurs
  3. Si l'adresse du serveur n'est pas spécifiée sur la ligne de commande ou un fichier de configuration spécifié à la commande, mais est disponible dans un fichier de configuration dans le répertoire de base de l'utilisateur (par exemple .myapprc), utilisez cette valeur.
  4. Si l'adresse du serveur n'est pas spécifiée dans l'un des mécanismes ci-dessus, quitter avec un message d'erreur.

Le plus proche que je l'ai vu à c'est le module configparse, qui, de ce que je peux dire offre un analyseur d'option qui examinera également les fichiers de configuration, mais ne semble pas avoir la notion de « Doit être spécifié quelque part "dont j'ai besoin.

Est-ce que quelqu'un connaît un module existant qui peut couvrir mon cas d'utilisation ci-dessus? Sinon, une simple extension à optparse, configparse ou à un autre module que je n'ai pas examiné serait également grandement appréciée.

+0

Quel type de fichier de configuration voulez-vous utiliser?Deux formats populaires sont les fichiers avec des extensions XML et INI. –

Répondre

1

Le module configparse de partie est écrit pour étendre optparse à partir de la bibliothèque Python standard. Comme l'indique le document optparse que j'ai mentionné, "optparse ne vous empêche pas d'implémenter les options requises, mais ne vous aide pas non plus" (bien que cela soit suivi par quelques URL qui vous montrent comment le faire) . Le plus simple est d'utiliser la fonctionnalité default value: spécifiez une valeur par défaut qui n'est pas réellement une valeur légale (pour quelque chose comme l'adresse d'un serveur, c'est plutôt facile) - puis, une fois les options traitées, vérifiez que la valeur spécifiée est légale. bonne idée de toute façon! -) et soulever l'exception appropriée sinon.

0

J'ai utilisé la fonction middleware opster avec SafeConfigParser pour obtenir un effet similaire (mais légèrement plus simple) comme vous le demandez. Vous devez implémenter la logique spécifique que vous avez décrite vous-même, mais elle vous assiste suffisamment pour la rendre relativement indolore. Un exemple d'utilisation de middleware d'opster est dans son exemple test/test.py.

0

Utilisez un dict pour stocker des options dans votre programme.

d'abord analyser le fichier d'options dans le répertoire de l'utilisateur et stocker toutes les options dans un dict (configparse ou tout autre module est la bienvenue). puis analyser la ligne de commande (en utilisant n'importe quel module, optparse pourrait bien convenir), si un argument spécifie un fichier de configuration, analyser le fichier spécifié dans un dict et mettre à jour vos options de lecture (dict.update est vraiment pratique pour fusionner 2 dict). puis stockez tous les autres arguments dans un autre dict, et fusionnez-les à nouveau (dict.update à nouveau ...). De cette façon, vous êtes sûr que la dict dans laquelle vous avez stocké les options contient la valeur que vous voulez, qui a été lue dans le fichier de l'utilisateur, à partir du fichier de configuration spécifié ou directement à partir de la ligne de commande. si elle ne contient pas de valeur requise, quittez avec une erreur.

Questions connexes