#32177: ManagementUtility instantiates CommandParser without passing already-
computed prog argument
-------------------------------------+-------------------------------------
Reporter: William | Owner: nobody
Schwartz |
Type: Bug | Status: new
Component: Core | Version: master
(Management commands) |
Severity: Normal | Keywords:
Triage Stage: | Has patch: 1
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 1
UI/UX: 0 |
-------------------------------------+-------------------------------------
`ManagementUtility`
[https://github.com/django/django/blob/354c1524b38c9b9f052c1d78dcbfa6ed5559aeb3/django/core/management/__init__.py#L188-L192
goes to the trouble] to parse the program name from the `argv` it's passed
rather than from `sys.argv`:
{{{
#!python
def __init__(self, argv=None):
self.argv = argv or sys.argv[:]
self.prog_name = os.path.basename(self.argv[0])
if self.prog_name == '__main__.py':
self.prog_name = 'python -m django'
}}}
But then when it needs to parse `--pythonpath` and `--settings`, it
[https://github.com/django/django/blob/354c1524b38c9b9f052c1d78dcbfa6ed5559aeb3/django/core/management/__init__.py#L347
uses] the program name from `sys.argv`:
{{{
#!python
parser = CommandParser(usage='%(prog)s subcommand [options]
[args]', add_help=False, allow_abbrev=False)
}}}
Above `"%(prog)s"` [https://docs.python.org/3/library/argparse.html#prog
refers] to `sys.argv[0]`. Instead, it should refer to `self.prog_name`.
This can fixed as follows:
{{{
#!python
parser = CommandParser(
prog=self.prog_name,
usage='%(prog)s subcommand [options] [args]',
add_help=False,
allow_abbrev=False)
}}}
I'm aware that `execute_from_command_line` is a private API, but it'd be
really convenient for me if it worked properly in my weird embedded
environment where `sys.argv[0]` is
[https://github.com/indygreg/PyOxidizer/issues/307 incorrectly] `None`. If
passing my own `argv` to `execute_from_command_line` avoided all the
ensuing exceptions, I wouldn't have to modify `sys.argv[0]` globally as
I'm doing in the meantime.
--
Ticket URL: <https://code.djangoproject.com/ticket/32177>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/053.0dfa25fd8fbee44e0b7ac9ccf8245766%40djangoproject.com.