From: Ben Finney Date: Wed, 2 Mar 2016 05:34:58 +0000 (+1100) Subject: Return system exit status from ‘main’. X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=817ffd46583ebd5207591ee82e0e571e5669961c;p=redacted-XKCD-password-generator.git Return system exit status from ‘main’. This makes ‘main’ easier to test: instead of unit tests needing to handle the exception, a request within the code to exit will turn into a simple return value. --- diff --git a/xkcdpass/xkcd_password.py b/xkcdpass/xkcd_password.py index d13065e..d8437e6 100755 --- a/xkcdpass/xkcd_password.py +++ b/xkcdpass/xkcd_password.py @@ -326,24 +326,35 @@ def main(argv=None): if argv is None: argv = sys.argv - program_name = os.path.basename(argv[0]) - parser = XkcdPassArgumentParser(prog=program_name) + exit_status = 0 - options = parser.parse_args(argv[1:]) - validate_options(parser, options) + try: + program_name = os.path.basename(argv[0]) + parser = XkcdPassArgumentParser(prog=program_name) - my_wordlist = generate_wordlist(wordfile=options.wordfile, - min_length=options.min_length, - max_length=options.max_length, - valid_chars=options.valid_chars) + options = parser.parse_args(argv[1:]) + validate_options(parser, options) - if options.verbose: - verbose_reports(len(my_wordlist), - options.numwords, - options.wordfile) + my_wordlist = generate_wordlist( + wordfile=options.wordfile, + min_length=options.min_length, + max_length=options.max_length, + valid_chars=options.valid_chars) - emit_passwords(my_wordlist, options) + if options.verbose: + verbose_reports( + len(my_wordlist), + options.numwords, + options.wordfile) + + emit_passwords(my_wordlist, options) + + except SystemExit as exc: + exit_status = exc.code + + return exit_status if __name__ == '__main__': - main(sys.argv) + exit_status = main(sys.argv) + sys.exit(exit_status)