#30305 closed Uncategorized (invalid)
Feature to set the returncode of a django custom command
Reported by: | stephanm | Owned by: | nobody |
---|---|---|---|
Component: | Uncategorized | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
In the docs:
I can see that the handle()
function will return a string which goes to stdout.
But I would like to set (supplementary) an integer returncode like its done in sys.exit()
see https://docs.python.org/3/library/sys.html#sys.exit
I didn't find any "official" way to do this, perhaps this is a new feature.
Thanks.
Change History (3)
comment:1 by , 6 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
Version: | 2.1 → master |
comment:2 by , 6 years ago
Resolution: | invalid |
---|---|
Status: | closed → new |
Hi,
I stepped a little through the code after the handle()
function returns.
Here I see in that I pass through the function
django.core.management.base.BaseCommand.run_from_argv()
which itself calls a connections.close_all()
function at the end,
so using sys.exit()
inside the handle()
function will not give the exact same
behaviour as a "controlled" exit.
Or do I miss something?
See: run_from_argv(self, argv)
def run_from_argv(self, argv): try: self.execute(*args, **cmd_options) except Exception as e: #.... finally: try: connections.close_all() except ImproperlyConfigured: # Ignore if connections aren't setup at this point (e.g. no # configured settings). pass
comment:4 by , 6 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
sys.exit()
works fine, e.g.
class Command(BaseCommand): def handle(self, *args, **options): sys.exit(43)
> python manage.py test_command > echo $? 43
All cleanup actions are honored (see sys.exit documentation). Please use one of support channels if you have more questions.
Thanks for the report, however answer for your question is already in the ticket description, i.e. you can use
sys.exit(custom_number)
in thehandle()
.