2014-07-11 1 views
0

J'ai défini certaines des options en utilisant optparse pour mon script python. Dans mon script, l'utilisateur entre les arguments de la ligne de commande dans n'importe quel ordre, mais je veux trier de la manière prédéfinie. Disons que l'utilisateur entre les arguments suivants:Tri des arguments de la ligne de commande entrés par l'utilisateur de la manière prédéfinie

scriptname -g gvalue -n nvalue -s svalue -k kvalue -e evalue 

Lorsque l'utilisateur entre les paramètres ci-dessus dans l'ordre, je veux trier de la manière suivante:

-s svalue -g gvalue -k kvalue -n nvalue -e evalue 

En fin de compte j'ai besoin de l'ordre ci-dessus à à tout moment.

+3

Je ne comprends pas; opt parse vous donnera les arguments par nom, quel que soit l'ordre d'origine. –

+1

vous utilisez des actions différentes de "action de magasin" dans votre configuration optparse? (à savoir "callback") –

+1

Pourquoi avez-vous besoin de les trier? Vous pouvez les trier, mais ce n'est vraiment pas nécessaire. En outre, [argparse] (https://docs.python.org/2/howto/argparse.html), optparse est obsolète. – sheeptest

Répondre

0

supposant optparse est définie par des commandes pour chaque valeur tels que:

parser.add_option("-k", action="store", type="string", dest="kvalue") 

et exécuté en tant que:

(options, args) = parser.parse_args() 

Puis options.kvalue contiendra l'argument entré par l'utilisateur concerné pour -k. Ensuite, la séquence en ordre pourrait être générée:

(getattr(options,name) for name in ('svalue', 'gvalue', 'kvalue', 'nvalue', 'evalue')) 

Alternativement, les comparaisons de chaînes sur la argv brute peut obtenir la même chose sans utiliser optparse.

1

Il existe probablement de meilleurs moyens d'obtenir ce que vous voulez. Vous ne devriez pas avoir besoin de faire ça. Mais voici le correctif:

Je vais utiliser argparse car optparse est obsolète. Ce code montrera None si l'utilisateur n'a pas spécifié de valeur pour cet argument

## directory user$ ./argparse_ex.py -s foo -g bar -k quox -n woo -e testing123 

import argparse 
parser = argparse.ArgumentParser(description='Sorted Arguments') 
parser.add_argument('-s', help='I will be printed if the user types --help') 
parser.add_argument('-g', help='I will be printed if the user types --help') 
parser.add_argument('-k', help='I will be printed if the user types --help') 
parser.add_argument('-n', help='I will be printed if the user types --help') 
parser.add_argument('-e', help='I will be printed if the user types --help') 

args = vars(parser.parse_args()) 

sorted_args = [args['s'], args['g'], args['k'], args['n'], args['e']] 
print sorted_args 

## ['foo', 'bar', 'quox', 'woo', 'testing123'] 

argparse documentation here

Questions connexes