Opened 3 years ago

Closed 3 years ago

Last modified 3 years ago

#18555 closed Bug (invalid)

Calling management commands programmatically without options no longer works [regression]

Reported by: marcelcoding@… Owned by: nobody
Component: Core (Management commands) Version: master
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


I apologize in case I'm doing this wrong from the very beginning, but for my application this looks like a relatively recent "cleanup" introduced a regression...

In Django 1.3.1, I was able to call the syncdb command from my python application like this:

If I'm doing this with django on trunk, I get

File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/", line 28, in handle_noargs
    verbosity = int(options.get('verbosity'))
TypeError: int() argument must be a string or a number, not 'NoneType'

This seems to be a direct result from the fixes for ticket #13760 and similar, where code like

int(options.get('verbosity', 1))

was replaced with:


The reasoning behind these patches was that the getopt parsing already provides reasonable defaults for all options -- but this is only true for arguments provided by the command line and not when a handle or handle_noargs method is called directly.

You can of course easily work around this problem by explicitly providing the options explicitely (in my case, I have to add verbosity=0 and database='default') -- but I wonder whether there is not a bunch of code out there that will break like mine did...

I don't know what a good solution would be, specifying defaults twice (and possibly inconsistently) as previously is certainly not an option.

Change History (2)

comment:1 Changed 3 years ago by claudep

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset
  • Resolution set to invalid
  • Status changed from new to closed

Calling commands programmatically must be done through call_command.

comment:2 Changed 3 years ago by marcelcoding@…

Well, that makes perfect sense and I'm glad I added the "I apologize in case I'm doing this wrong from the very beginning" in my report ;) Thank you very much for your swift reply and sorry for wasting your time.

Note: See TracTickets for help on using tickets.
Back to Top