| r"""Usage: prog |
| |
| """ |
| $ prog |
| {} |
| |
| $ prog --xxx |
| "user-error" |
| |
| |
| r"""Usage: prog [options] |
| |
| Options: -a All. |
| |
| """ |
| $ prog |
| {"-a": false} |
| |
| $ prog -a |
| {"-a": true} |
| |
| $ prog -x |
| "user-error" |
| |
| |
| r"""Usage: prog [options] |
| |
| Options: --all All. |
| |
| """ |
| $ prog |
| {"--all": false} |
| |
| $ prog --all |
| {"--all": true} |
| |
| $ prog --xxx |
| "user-error" |
| |
| |
| r"""Usage: prog [options] |
| |
| Options: -v, --verbose Verbose. |
| |
| """ |
| $ prog --verbose |
| {"--verbose": true} |
| |
| $ prog --ver |
| {"--verbose": true} |
| |
| $ prog -v |
| {"--verbose": true} |
| |
| |
| r"""Usage: prog [options] |
| |
| Options: -p PATH |
| |
| """ |
| $ prog -p home/ |
| {"-p": "home/"} |
| |
| $ prog -phome/ |
| {"-p": "home/"} |
| |
| $ prog -p |
| "user-error" |
| |
| |
| r"""Usage: prog [options] |
| |
| Options: --path <path> |
| |
| """ |
| $ prog --path home/ |
| {"--path": "home/"} |
| |
| $ prog --path=home/ |
| {"--path": "home/"} |
| |
| $ prog --pa home/ |
| {"--path": "home/"} |
| |
| $ prog --pa=home/ |
| {"--path": "home/"} |
| |
| $ prog --path |
| "user-error" |
| |
| |
| r"""Usage: prog [options] |
| |
| Options: -p PATH, --path=<path> Path to files. |
| |
| """ |
| $ prog -proot |
| {"--path": "root"} |
| |
| |
| r"""Usage: prog [options] |
| |
| Options: -p --path PATH Path to files. |
| |
| """ |
| $ prog -p root |
| {"--path": "root"} |
| |
| $ prog --path root |
| {"--path": "root"} |
| |
| |
| r"""Usage: prog [options] |
| |
| Options: |
| -p PATH Path to files [default: ./] |
| |
| """ |
| $ prog |
| {"-p": "./"} |
| |
| $ prog -phome |
| {"-p": "home"} |
| |
| |
| r"""UsAgE: prog [options] |
| |
| OpTiOnS: --path=<files> Path to files |
| [dEfAuLt: /root] |
| |
| """ |
| $ prog |
| {"--path": "/root"} |
| |
| $ prog --path=home |
| {"--path": "home"} |
| |
| |
| r"""usage: prog [options] |
| |
| options: |
| -a Add |
| -r Remote |
| -m <msg> Message |
| |
| """ |
| $ prog -a -r -m Hello |
| {"-a": true, |
| "-r": true, |
| "-m": "Hello"} |
| |
| $ prog -armyourass |
| {"-a": true, |
| "-r": true, |
| "-m": "yourass"} |
| |
| $ prog -a -r |
| {"-a": true, |
| "-r": true, |
| "-m": null} |
| |
| |
| r"""Usage: prog [options] |
| |
| Options: --version |
| --verbose |
| |
| """ |
| $ prog --version |
| {"--version": true, |
| "--verbose": false} |
| |
| $ prog --verbose |
| {"--version": false, |
| "--verbose": true} |
| |
| $ prog --ver |
| "user-error" |
| |
| $ prog --verb |
| {"--version": false, |
| "--verbose": true} |
| |
| |
| r"""usage: prog [-a -r -m <msg>] |
| |
| options: |
| -a Add |
| -r Remote |
| -m <msg> Message |
| |
| """ |
| $ prog -armyourass |
| {"-a": true, |
| "-r": true, |
| "-m": "yourass"} |
| |
| |
| r"""usage: prog [-armmsg] |
| |
| options: -a Add |
| -r Remote |
| -m <msg> Message |
| |
| """ |
| $ prog -a -r -m Hello |
| {"-a": true, |
| "-r": true, |
| "-m": "Hello"} |
| |
| |
| r"""usage: prog -a -b |
| |
| options: |
| -a |
| -b |
| |
| """ |
| $ prog -a -b |
| {"-a": true, "-b": true} |
| |
| $ prog -b -a |
| {"-a": true, "-b": true} |
| |
| $ prog -a |
| "user-error" |
| |
| $ prog |
| "user-error" |
| |
| |
| r"""usage: prog (-a -b) |
| |
| options: -a |
| -b |
| |
| """ |
| $ prog -a -b |
| {"-a": true, "-b": true} |
| |
| $ prog -b -a |
| {"-a": true, "-b": true} |
| |
| $ prog -a |
| "user-error" |
| |
| $ prog |
| "user-error" |
| |
| |
| r"""usage: prog [-a] -b |
| |
| options: -a |
| -b |
| |
| """ |
| $ prog -a -b |
| {"-a": true, "-b": true} |
| |
| $ prog -b -a |
| {"-a": true, "-b": true} |
| |
| $ prog -a |
| "user-error" |
| |
| $ prog -b |
| {"-a": false, "-b": true} |
| |
| $ prog |
| "user-error" |
| |
| |
| r"""usage: prog [(-a -b)] |
| |
| options: -a |
| -b |
| |
| """ |
| $ prog -a -b |
| {"-a": true, "-b": true} |
| |
| $ prog -b -a |
| {"-a": true, "-b": true} |
| |
| $ prog -a |
| "user-error" |
| |
| $ prog -b |
| "user-error" |
| |
| $ prog |
| {"-a": false, "-b": false} |
| |
| |
| r"""usage: prog (-a|-b) |
| |
| options: -a |
| -b |
| |
| """ |
| $ prog -a -b |
| "user-error" |
| |
| $ prog |
| "user-error" |
| |
| $ prog -a |
| {"-a": true, "-b": false} |
| |
| $ prog -b |
| {"-a": false, "-b": true} |
| |
| |
| r"""usage: prog [ -a | -b ] |
| |
| options: -a |
| -b |
| |
| """ |
| $ prog -a -b |
| "user-error" |
| |
| $ prog |
| {"-a": false, "-b": false} |
| |
| $ prog -a |
| {"-a": true, "-b": false} |
| |
| $ prog -b |
| {"-a": false, "-b": true} |
| |
| |
| r"""usage: prog <arg>""" |
| $ prog 10 |
| {"<arg>": "10"} |
| |
| $ prog 10 20 |
| "user-error" |
| |
| $ prog |
| "user-error" |
| |
| |
| r"""usage: prog [<arg>]""" |
| $ prog 10 |
| {"<arg>": "10"} |
| |
| $ prog 10 20 |
| "user-error" |
| |
| $ prog |
| {"<arg>": null} |
| |
| |
| r"""usage: prog <kind> <name> <type>""" |
| $ prog 10 20 40 |
| {"<kind>": "10", "<name>": "20", "<type>": "40"} |
| |
| $ prog 10 20 |
| "user-error" |
| |
| $ prog |
| "user-error" |
| |
| |
| r"""usage: prog <kind> [<name> <type>]""" |
| $ prog 10 20 40 |
| {"<kind>": "10", "<name>": "20", "<type>": "40"} |
| |
| $ prog 10 20 |
| {"<kind>": "10", "<name>": "20", "<type>": null} |
| |
| $ prog |
| "user-error" |
| |
| |
| r"""usage: prog [<kind> | <name> <type>]""" |
| $ prog 10 20 40 |
| "user-error" |
| |
| $ prog 20 40 |
| {"<kind>": null, "<name>": "20", "<type>": "40"} |
| |
| $ prog |
| {"<kind>": null, "<name>": null, "<type>": null} |
| |
| |
| r"""usage: prog (<kind> --all | <name>) |
| |
| options: |
| --all |
| |
| """ |
| $ prog 10 --all |
| {"<kind>": "10", "--all": true, "<name>": null} |
| |
| $ prog 10 |
| {"<kind>": null, "--all": false, "<name>": "10"} |
| |
| $ prog |
| "user-error" |
| |
| |
| r"""usage: prog [<name> <name>]""" |
| $ prog 10 20 |
| {"<name>": ["10", "20"]} |
| |
| $ prog 10 |
| {"<name>": ["10"]} |
| |
| $ prog |
| {"<name>": []} |
| |
| |
| r"""usage: prog [(<name> <name>)]""" |
| $ prog 10 20 |
| {"<name>": ["10", "20"]} |
| |
| $ prog 10 |
| "user-error" |
| |
| $ prog |
| {"<name>": []} |
| |
| |
| r"""usage: prog NAME...""" |
| $ prog 10 20 |
| {"NAME": ["10", "20"]} |
| |
| $ prog 10 |
| {"NAME": ["10"]} |
| |
| $ prog |
| "user-error" |
| |
| |
| r"""usage: prog [NAME]...""" |
| $ prog 10 20 |
| {"NAME": ["10", "20"]} |
| |
| $ prog 10 |
| {"NAME": ["10"]} |
| |
| $ prog |
| {"NAME": []} |
| |
| |
| r"""usage: prog [NAME...]""" |
| $ prog 10 20 |
| {"NAME": ["10", "20"]} |
| |
| $ prog 10 |
| {"NAME": ["10"]} |
| |
| $ prog |
| {"NAME": []} |
| |
| |
| r"""usage: prog [NAME [NAME ...]]""" |
| $ prog 10 20 |
| {"NAME": ["10", "20"]} |
| |
| $ prog 10 |
| {"NAME": ["10"]} |
| |
| $ prog |
| {"NAME": []} |
| |
| |
| r"""usage: prog (NAME | --foo NAME) |
| |
| options: --foo |
| |
| """ |
| $ prog 10 |
| {"NAME": "10", "--foo": false} |
| |
| $ prog --foo 10 |
| {"NAME": "10", "--foo": true} |
| |
| $ prog --foo=10 |
| "user-error" |
| |
| |
| r"""usage: prog (NAME | --foo) [--bar | NAME] |
| |
| options: --foo |
| options: --bar |
| |
| """ |
| $ prog 10 |
| {"NAME": ["10"], "--foo": false, "--bar": false} |
| |
| $ prog 10 20 |
| {"NAME": ["10", "20"], "--foo": false, "--bar": false} |
| |
| $ prog --foo --bar |
| {"NAME": [], "--foo": true, "--bar": true} |
| |
| |
| r"""Naval Fate. |
| |
| Usage: |
| prog ship new <name>... |
| prog ship [<name>] move <x> <y> [--speed=<kn>] |
| prog ship shoot <x> <y> |
| prog mine (set|remove) <x> <y> [--moored|--drifting] |
| prog -h | --help |
| prog --version |
| |
| Options: |
| -h --help Show this screen. |
| --version Show version. |
| --speed=<kn> Speed in knots [default: 10]. |
| --moored Mored (anchored) mine. |
| --drifting Drifting mine. |
| |
| """ |
| $ prog ship Guardian move 150 300 --speed=20 |
| {"--drifting": false, |
| "--help": false, |
| "--moored": false, |
| "--speed": "20", |
| "--version": false, |
| "<name>": ["Guardian"], |
| "<x>": "150", |
| "<y>": "300", |
| "mine": false, |
| "move": true, |
| "new": false, |
| "remove": false, |
| "set": false, |
| "ship": true, |
| "shoot": false} |
| |
| |
| r"""usage: prog --hello""" |
| $ prog --hello |
| {"--hello": true} |
| |
| |
| r"""usage: prog [--hello=<world>]""" |
| $ prog |
| {"--hello": null} |
| |
| $ prog --hello wrld |
| {"--hello": "wrld"} |
| |
| |
| r"""usage: prog [-o]""" |
| $ prog |
| {"-o": false} |
| |
| $ prog -o |
| {"-o": true} |
| |
| |
| r"""usage: prog [-opr]""" |
| $ prog -op |
| {"-o": true, "-p": true, "-r": false} |
| |
| |
| r"""usage: prog --aabb | --aa""" |
| $ prog --aa |
| {"--aabb": false, "--aa": true} |
| |
| $ prog --a |
| "user-error" # not a unique prefix |
| |
| # |
| # Counting number of flags |
| # |
| |
| r"""Usage: prog -v""" |
| $ prog -v |
| {"-v": true} |
| |
| |
| r"""Usage: prog [-v -v]""" |
| $ prog |
| {"-v": 0} |
| |
| $ prog -v |
| {"-v": 1} |
| |
| $ prog -vv |
| {"-v": 2} |
| |
| |
| r"""Usage: prog -v ...""" |
| $ prog |
| "user-error" |
| |
| $ prog -v |
| {"-v": 1} |
| |
| $ prog -vv |
| {"-v": 2} |
| |
| $ prog -vvvvvv |
| {"-v": 6} |
| |
| |
| r"""Usage: prog [-v | -vv | -vvv] |
| |
| This one is probably most readable user-friednly variant. |
| |
| """ |
| $ prog |
| {"-v": 0} |
| |
| $ prog -v |
| {"-v": 1} |
| |
| $ prog -vv |
| {"-v": 2} |
| |
| $ prog -vvvv |
| "user-error" |
| |
| |
| r"""usage: prog [--ver --ver]""" |
| $ prog --ver --ver |
| {"--ver": 2} |
| |
| |
| # |
| # Counting commands |
| # |
| |
| r"""usage: prog [go]""" |
| $ prog go |
| {"go": true} |
| |
| |
| r"""usage: prog [go go]""" |
| $ prog |
| {"go": 0} |
| |
| $ prog go |
| {"go": 1} |
| |
| $ prog go go |
| {"go": 2} |
| |
| $ prog go go go |
| "user-error" |
| |
| r"""usage: prog go...""" |
| $ prog go go go go go |
| {"go": 5} |
| |
| # |
| # [options] does not include options from usage-pattern |
| # |
| r"""usage: prog [options] [-a] |
| |
| options: -a |
| -b |
| """ |
| $ prog -a |
| {"-a": true, "-b": false} |
| |
| $ prog -aa |
| "user-error" |
| |
| # |
| # Test [options] shourtcut |
| # |
| |
| r"""Usage: prog [options] A |
| Options: |
| -q Be quiet |
| -v Be verbose. |
| |
| """ |
| $ prog arg |
| {"A": "arg", "-v": false, "-q": false} |
| |
| $ prog -v arg |
| {"A": "arg", "-v": true, "-q": false} |
| |
| $ prog -q arg |
| {"A": "arg", "-v": false, "-q": true} |
| |
| # |
| # Test single dash |
| # |
| |
| r"""usage: prog [-]""" |
| |
| $ prog - |
| {"-": true} |
| |
| $ prog |
| {"-": false} |
| |
| # |
| # If argument is repeated, its value should always be a list |
| # |
| |
| r"""usage: prog [NAME [NAME ...]]""" |
| |
| $ prog a b |
| {"NAME": ["a", "b"]} |
| |
| $ prog |
| {"NAME": []} |
| |
| # |
| # Option's argument defaults to null/None |
| # |
| |
| r"""usage: prog [options] |
| options: |
| -a Add |
| -m <msg> Message |
| |
| """ |
| $ prog -a |
| {"-m": null, "-a": true} |
| |
| # |
| # Test options without description |
| # |
| |
| r"""usage: prog --hello""" |
| $ prog --hello |
| {"--hello": true} |
| |
| r"""usage: prog [--hello=<world>]""" |
| $ prog |
| {"--hello": null} |
| |
| $ prog --hello wrld |
| {"--hello": "wrld"} |
| |
| r"""usage: prog [-o]""" |
| $ prog |
| {"-o": false} |
| |
| $ prog -o |
| {"-o": true} |
| |
| r"""usage: prog [-opr]""" |
| $ prog -op |
| {"-o": true, "-p": true, "-r": false} |
| |
| r"""usage: git [-v | --verbose]""" |
| $ prog -v |
| {"-v": true, "--verbose": false} |
| |
| r"""usage: git remote [-v | --verbose]""" |
| $ prog remote -v |
| {"remote": true, "-v": true, "--verbose": false} |
| |
| # |
| # Test empty usage pattern |
| # |
| |
| r"""usage: prog""" |
| $ prog |
| {} |
| |
| r"""usage: prog |
| prog <a> <b> |
| """ |
| $ prog 1 2 |
| {"<a>": "1", "<b>": "2"} |
| |
| $ prog |
| {"<a>": null, "<b>": null} |
| |
| r"""usage: prog <a> <b> |
| prog |
| """ |
| $ prog |
| {"<a>": null, "<b>": null} |
| |
| # |
| # Option's argument should not capture default value from usage pattern |
| # |
| |
| r"""usage: prog [--file=<f>]""" |
| $ prog |
| {"--file": null} |
| |
| r"""usage: prog [--file=<f>] |
| |
| options: --file <a> |
| |
| """ |
| $ prog |
| {"--file": null} |
| |
| r"""Usage: prog [-a <host:port>] |
| |
| Options: -a, --address <host:port> TCP address [default: localhost:6283]. |
| |
| """ |
| $ prog |
| {"--address": "localhost:6283"} |
| |
| # |
| # If option with argument could be repeated, |
| # its arguments should be accumulated into a list |
| # |
| |
| r"""usage: prog --long=<arg> ...""" |
| |
| $ prog --long one |
| {"--long": ["one"]} |
| |
| $ prog --long one --long two |
| {"--long": ["one", "two"]} |
| |
| # |
| # Test multiple elements repeated at once |
| # |
| |
| r"""usage: prog (go <direction> --speed=<km/h>)...""" |
| $ prog go left --speed=5 go right --speed=9 |
| {"go": 2, "<direction>": ["left", "right"], "--speed": ["5", "9"]} |
| |
| # |
| # Required options should work with option shortcut |
| # |
| |
| r"""usage: prog [options] -a |
| |
| options: -a |
| |
| """ |
| $ prog -a |
| {"-a": true} |
| |
| # |
| # If option could be repeated its defaults should be split into a list |
| # |
| |
| r"""usage: prog [-o <o>]... |
| |
| options: -o <o> [default: x] |
| |
| """ |
| $ prog -o this -o that |
| {"-o": ["this", "that"]} |
| |
| $ prog |
| {"-o": ["x"]} |
| |
| r"""usage: prog [-o <o>]... |
| |
| options: -o <o> [default: x y] |
| |
| """ |
| $ prog -o this |
| {"-o": ["this"]} |
| |
| $ prog |
| {"-o": ["x", "y"]} |
| |
| # |
| # Test stacked option's argument |
| # |
| |
| r"""usage: prog -pPATH |
| |
| options: -p PATH |
| |
| """ |
| $ prog -pHOME |
| {"-p": "HOME"} |
| |
| # |
| # Issue 56: Repeated mutually exclusive args give nested lists sometimes |
| # |
| |
| r"""Usage: foo (--xx=x|--yy=y)...""" |
| $ prog --xx=1 --yy=2 |
| {"--xx": ["1"], "--yy": ["2"]} |
| |
| # |
| # POSIXly correct tokenization |
| # |
| |
| r"""usage: prog [<input file>]""" |
| $ prog f.txt |
| {"<input file>": "f.txt"} |
| |
| r"""usage: prog [--input=<file name>]...""" |
| $ prog --input a.txt --input=b.txt |
| {"--input": ["a.txt", "b.txt"]} |
| |
| # |
| # Issue 85: `[options]` shourtcut with multiple subcommands |
| # |
| |
| r"""usage: prog good [options] |
| prog fail [options] |
| |
| options: --loglevel=N |
| |
| """ |
| $ prog fail --loglevel 5 |
| {"--loglevel": "5", "fail": true, "good": false} |
| |
| # |
| # Usage-section syntax |
| # |
| |
| r"""usage:prog --foo""" |
| $ prog --foo |
| {"--foo": true} |
| |
| r"""PROGRAM USAGE: prog --foo""" |
| $ prog --foo |
| {"--foo": true} |
| |
| r"""Usage: prog --foo |
| prog --bar |
| NOT PART OF SECTION""" |
| $ prog --foo |
| {"--foo": true, "--bar": false} |
| |
| r"""Usage: |
| prog --foo |
| prog --bar |
| |
| NOT PART OF SECTION""" |
| $ prog --foo |
| {"--foo": true, "--bar": false} |
| |
| r"""Usage: |
| prog --foo |
| prog --bar |
| NOT PART OF SECTION""" |
| $ prog --foo |
| {"--foo": true, "--bar": false} |
| |
| # |
| # Options-section syntax |
| # |
| |
| r"""Usage: prog [options] |
| |
| global options: --foo |
| local options: --baz |
| --bar |
| other options: |
| --egg |
| --spam |
| -not-an-option- |
| |
| """ |
| $ prog --baz --egg |
| {"--foo": false, "--baz": true, "--bar": false, "--egg": true, "--spam": false} |