C'est exactement ce que propose OptionParser!
Consultez le code suivant:
import sys
import os
from optparse import OptionParser
__all__ = []
__version__ = 0.1
__date__ = '2014-01-21'
__updated__ = '2014-01-21'
def main(argv=None):
'''Command line options.'''
program_name = os.path.basename(sys.argv[0])
program_version = "v0.1"
program_build_date = "%s" % __updated__
program_version_string = '%%prog %s (%s)' % (program_version, program_build_date)
program_longdesc = '''This will be displayed beneath your help information''' # optional - give further explanation about what the program does
program_license = "Copyright 2014 Code Tester (Jython Dev Inc.) \
Licensed under the Apache License 2.0\nhttp://www.apache.org/licenses/LICENSE-2.0"
if argv is None:
argv = sys.argv[1:]
try:
# setup option parser
parser = OptionParser(version=program_version_string, epilog=program_longdesc, description=program_license)
parser.add_option("-i", "--in", dest="infile", help="set input path [default: %default]", metavar="FILE")
parser.add_option("-o", "--out", dest="outfile", help="set output path [default: %default]", metavar="FILE")
parser.add_option("-d", "--debug", dest="modeDebug", action="store_true", help="Prints additional debug information")
parser.add_option("-m", "--map", dest="listKVPs", action="append", help="Key value pair mappings (i.e. left=right)", metavar="KVP")
parser.add_option("-r", "--role", dest="listProtectedRoles", action="append", help="Protected system roles to use (multiple allowed)", metavar="Role")
parser.add_option("-u", "--user", dest="listProtectedUsers", action="append", help="Protected system users to be used (multiple allowed)", metavar="User")
# set defaults
parser.set_defaults(outfile="./out.txt", infile="./in.txt")
# process options
(opts, args) = parser.parse_args(argv)
if opts.modeDebug:
print("Running in DEBUG mode")
if opts.infile:
print("infile = %s" % opts.infile)
if opts.outfile:
print("outfile = %s" % opts.outfile)
if opts.listKVPs:
print("KVP's = %s" % opts.listKVPs)
if opts.listProtectedRoles:
print("Protected Roles = %s" % opts.listProtectedRoles)
if opts.listProtectedUsers:
print("Protected Users = %s" % opts.listProtectedUsers)
'''
Do something interesting with the parameters here!
'''
except Exception, e:
indent = len(program_name) * " "
sys.stderr.write(program_name + ": " + repr(e) + "\n")
sys.stderr.write(indent + " for help use --help")
return 2
if __name__ == "__main__":
sys.exit(main())
Si vous exécutez ce avec un -h (ou --help) vous obtenez les éléments suivants:
Usage: OptParseExample.py [options]
Copyright 2014 Code Tester (Jython Dev Inc.)
Licensed under the Apache License 2.0
http://www.apache.org/licenses/LICENSE-2.0
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-i FILE, --in=FILE set input path [default: ./in.txt]
-o FILE, --out=FILE set output path [default: ./out.txt]
-d, --debug Prints additional debug information
-m KVP, --map=KVP Key value pair mappings (i.e. left=right)
-r Role, --role=Role Protected system roles to use (multiple allowed)
-u User, --user=User Protected system users to be used (multiple allowed)
This will be displayed beneath your help information
Maintenant, si nous courons cela avec plus de paramètres, à savoir:
testScript.py -d -i input.txt -o output.txt -m jython=cool -r Admins -r DomainAdmins
nous obtenons la sortie montré:
Running in DEBUG mode
infile = input.txt
outfile = output.txt
KVP's = ['jython=cool']
Protected Roles = ['Admins', 'DomainAdmins']
note quelques petites choses:
- L'ordre des paramètres sur la ligne de commande n'a pas d'importance (tant que les paramètres sont fournis avec leurs indicateurs associés)
- L'option -d dans ce cas est utilisée comme paramètre "store_true", pour indiquer qu'il s'agit d'un indicateur booléen
- Les autres paramètres prennent toutes les valeurs supplémentaires
- Si un paramètre qui prend une valeur peut accepter plus d'une valeur, vous pouvez le déclarer comme une liste (en utilisant l'action append)
- Une fois que tous les paramètres ont été traités, vous avez toujours des paramètres de ligne de commande supplémentaires disponibles via la variable 'args'.
Pour plus d'informations, s'il vous plaît jeter un oeil à http://jython.org/docs/library/optparse.html
** Note **: Utilisation * optparse * est déconseillée depuis la version python 2.7. Le module optparse est obsolète et ne sera pas développé davantage; le développement se poursuivra avec le module * argparse *. Voir [PEP 0389] (http://www.python.org/dev/peps/pep-0389/) pour plus d'informations. – shakaran