diff -r d03730abd2f6 Lib/argparse.py --- a/Lib/argparse.py Sun Aug 24 10:50:28 2014 -0400 +++ b/Lib/argparse.py Sun Aug 24 16:07:43 2014 +0300 @@ -91,6 +91,7 @@ import textwrap as _textwrap from gettext import gettext as _, ngettext +from zipfile import is_zipfile as _is_zipfile SUPPRESS = '==SUPPRESS==' @@ -1572,6 +1573,24 @@ self._group_actions.remove(action) +def _prog_name(prog): + if prog is not None: + return prog + + mod = _sys.modules['__main__'] + if mod.__package__ is None: + return _os.path.basename(_sys.argv[0]) + + + if _is_zipfile(_sys.argv[0]): + suffix = _sys.argv[0] + else: + suffix = '-m %s' % mod.__package__ + + py = _os.path.basename(_sys.executable) + return '%s %s' % (py, suffix) + + class ArgumentParser(_AttributeHolder, _ActionsContainer): """Object for parsing command line strings into Python objects. @@ -1609,11 +1628,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 d03730abd2f6 Lib/test/test_argparse.py --- a/Lib/test/test_argparse.py Sun Aug 24 10:50:28 2014 -0400 +++ b/Lib/test/test_argparse.py Sun Aug 24 16:07:43 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]