Utilisation de la sortie argparse pour appeler des fonctions
Actuellement mon code ressemble à ceci. Cela me permet d'analyser plusieurs paramètres de mon script d'un programme obtient. Est-il une autre manière qui est plus proche de "bonnes pratiques"? Je n'ai pas vu de code fait à l'aide de la sortie de argparse
seulement comment le configurer.
def useArguments():
x = 0
while x <= 5:
if x == 0:
if args.getweather != None:
getWeather(args.getweather)
if x == 1:
if args.post != None:
post(args.post)
if x == 2:
if args.custompost != None:
custompost(args.custompost)
if x == 3:
if args.list != None:
listAccounts(args.list)
if x == 4:
if args.add != None:
addAccount(args.add[0])
if x == 5:
if args.edit != None:
editAccount(args.edit[0])
x = x + 1
if __name__ == '__main__':
updateConfig()
parser = argparse.ArgumentParser(description='Post Yahoo weather to Twitter.', epilog="Report any bugs to [email protected]", prog='Program')
parser.add_argument('-a', '--add', nargs=1, help='Add a new account. Use the desired account name as an argument.')
parser.add_argument('-e', '--edit', nargs=1, choices=accountListSTR[:-1], help='Edit an account. Use the desired account name as an argument.')
parser.add_argument('-g', '--getweather', nargs='*', choices=accountListSTR, help='Get weather and post here. Specify account(s) as argument. Use "all" for all accounts. If you specify multiple accounts, separate by a space NOT a comma.')
parser.add_argument('-p', '--post', nargs='*', choices=accountListSTR, help='Post weather to Twitter. Specify account(s) as argument. Use "all" for all accounts. If you specify multiple accounts, separate by a space NOT a comma.')
parser.add_argument('-c', '--custompost', nargs=2, help='Post a custom message. Specify an account then type the message. Make sure you use "" around the message. Use "all" for all accounts.')
parser.add_argument('-l', '--list', action='store_const', const='all', help='List all accounts.')
parser.add_argument('--version', action='version', version='%(prog)s 0.3.3')
args = parser.parse_args()
useArguments()
source d'informationauteur avacariu
Vous devez vous connecter pour publier un commentaire.
À fournir une coutume action pour un argument, et je cite:
Voir http://docs.python.org/library/argparse.html#sub-commands:
En un mot:
Ici, nous créons un subparser pour la commande
get-weather
et affecter la fonctionget_weather
.Noter que la documentation dit que le mot-clé/attribut est nommé
func
mais il est certainementfunction
de argparse 1.1.Le code résultant est un peu trop bavard donc, j'ai publié un petit paquet "argh" qui rend les choses plus simples, par exemple:
"Argh" peut faire plus mais je vais laisser débordement de pile répondre. 🙂
À l'exception de
--version
ce qui est très souvent une option, les actions que vous avez fournies sont mieux traités comme des "sous-commandes".Je suis pas au courant de la argparse les détails, que je n'ai pas encore essayer de Python 2.7, mais vous pouvez prendre un coup d'oeil à la
svn
de commande comme un exemple, voici un pseudo-code de la ligne de commande:Où
<command>
:Et
<command opts>
sont des options spécifiques à la commande. À l'aide de optparse (qui est similaire), cela signifie que votre commande serait retourné dansargs
lors de l'appel deparse_args
vous permettant de faire quelque chose comme ceci:Je trouve ce modèle particulièrement utile pour le débogage, où j'avais donner accès à des fonctions internes à partir de la ligne de commande, et de passer les différents arguments pour les tests. Ajuster la sélection du gestionnaire de commande en fonction de votre propre projet.