diff -r 10d0a692b1b6 Lib/argparse.py --- a/Lib/argparse.py Wed Aug 20 07:55:53 2014 +0530 +++ b/Lib/argparse.py Wed Aug 20 15:10:11 2014 +0300 @@ -1572,6 +1572,21 @@ self._group_actions.remove(action) +def _prog_name(prog): + if prog is not None: + return prog + + prog = _os.path.basename(_sys.argv[0]) + + if prog != '__main__.py': + return prog + + # If prog == '__main__.py' then "python -m module" was called + mod = _sys.modules['__main__'].__package__ + py = _os.path.basename(_sys.executable) + return '%s -m %s' % (py, mod) + + class ArgumentParser(_AttributeHolder, _ActionsContainer): """Object for parsing command line strings into Python objects. @@ -1609,11 +1624,7 @@ argument_default=argument_default, conflict_handler=conflict_handler) - # default setting for prog - if prog is None: - prog = _os.path.basename(_sys.argv[0]) - - self.prog = prog + self.prog = _prog_name(prog) self.usage = usage self.epilog = epilog self.formatter_class = formatter_class diff -r 10d0a692b1b6 Lib/test/test_argparse.py --- a/Lib/test/test_argparse.py Wed Aug 20 07:55:53 2014 +0530 +++ b/Lib/test/test_argparse.py Wed Aug 20 15:10:11 2014 +0300 @@ -2223,7 +2223,7 @@ parents = [self.abcd_parent, self.wxyz_parent] parser = ErrorRaisingArgumentParser(parents=parents) parser_help = parser.format_help() - progname = self.main_program + progname = 'python -m test' self.assertEqual(parser_help, textwrap.dedent('''\ usage: {}{}[-h] [-b B] [--d D] [--w W] [-y Y] a z @@ -2257,7 +2257,7 @@ ['-y', 'Y', '-z', 'Z']) parser_help = parser.format_help() - progname = self.main_program + progname = 'python -m test' self.assertEqual(parser_help, textwrap.dedent('''\ usage: {}{}[-h] [-w W] [-x X] [-y Y | -z Z]