これはまさに OptionParser が処理するように設計されているものです!
次のコードを検討してください。
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())
-h (または --help) を指定してこれを実行すると、次の結果が得られます。
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
ここで、より多くのパラメーターを指定してこれを実行すると、次のようになります。
testScript.py -d -i input.txt -o output.txt -m jython=cool -r Admins -r DomainAdmins
次のような出力が得られます。
Running in DEBUG mode
infile = input.txt
outfile = output.txt
KVP's = ['jython=cool']
Protected Roles = ['Admins', 'DomainAdmins']
いくつかのことに注意してください。
- コマンド ラインでのパラメーターの順序は重要ではありません (パラメーターに関連するフラグが指定されている限り)。
- この場合の -d オプションは、「store_true」パラメーターとして使用され、ブール値フラグであることを示します。
- 他のパラメータはすべて追加の値を取ります
- 値を取るパラメーターが複数の値を受け入れることができる場合、それをリストとして宣言できます (追加アクションを使用)。
- すべてのパラメーターが処理された後も、「args」変数を介して使用できる追加のコマンド ライン パラメーターが残っています。
詳細については、http://jython.org/docs/library/optparse.htmlをご覧ください。