@@ -90,6 +90,7 @@
import sys as _sys
from gettext import gettext as _, ngettext
+from zipfile import is_zipfile as _is_zipfile
SUPPRESS = '==SUPPRESS=='
@@ -1662,6 +1663,22 @@
self._group_actions.remove(action)
+def _prog_name(prog):
+ if prog is not None:
+ return prog
+
+ mod = _sys.modules['__main__']
+ arg0 = _sys.argv[0]
+ if mod.__spec__ is None:
+ return _os.path.basename(arg0)
+
+ py = _os.path.basename(_sys.executable)
+ if _is_zipfile(arg0):
+ return f'{py} {arg0}'
+
+ return f'{py} -m {mod.__spec__.name.removesuffix(".__main__")}'
+
+
class ArgumentParser(_AttributeHolder, _ActionsContainer):
"""Object for parsing command line strings into Python objects.
@@ -1704,11 +1721,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