A wrapper around the real docopt parser.
(usage, **keywords)
| 54 | |
| 55 | |
| 56 | def docopt(usage, **keywords): |
| 57 | """ A wrapper around the real docopt parser. """ |
| 58 | new_usage = usage |
| 59 | |
| 60 | if "program" in keywords: |
| 61 | program = keywords.pop("program") |
| 62 | new_usage = usage.replace(program, program.replace(" ", "-")) |
| 63 | |
| 64 | try: |
| 65 | stdout = sys.stdout |
| 66 | |
| 67 | with open(os.devnull, 'w') as nullfile: |
| 68 | sys.stdout = nullfile |
| 69 | arguments = real_docopt(new_usage, **keywords) |
| 70 | sys.stdout = stdout |
| 71 | |
| 72 | return arguments |
| 73 | |
| 74 | except DocoptExit: |
| 75 | sys.stdout = stdout |
| 76 | print(usage.strip(), file=sys.stderr) |
| 77 | sys.exit(1) |
| 78 | |
| 79 | except SystemExit: |
| 80 | sys.stdout = stdout |
| 81 | |
| 82 | if "argv" in keywords and any(h in ("-h", "--help") |
| 83 | for h in keywords["argv"]): |
| 84 | print(usage.strip()) |
| 85 | elif "version" in keywords and any(v in ("--version") |
| 86 | for v in keywords["argv"]): |
| 87 | print(keywords["version"].strip()) |
| 88 | |
| 89 | sys.exit() |