Testlerimden birinden Django yönetim komutunu aramak istiyorum. Bunun için django.core.management.call_command
kullanıyorum. Ve işe yaramıyor.Django'nun call_command öğesi eksik argümanlarla başarısız oluyor
4 zorunlu argümanı olan bir komutum var. Onu aradığınızda, tüm argümanlar onları geçiyorum rağmen eksik yakınır:
call_command('my_command', url='12', project='abc', website='zbb', title='12345')
Ben baz komut hatası alıyorum o --url, --project, --Forum ve --title eksik .
Bu argümanlar için farklı bir hedef belirtmedim.
Bencall_command
kaynağında bakıp
call_command
aşağıdaki satıra sorunu kesin olarak belirlemiş:
if command.use_argparse:
# Use the `dest` option name from the parser option
opt_mapping = {sorted(s_opt.option_strings)[0].lstrip('-').replace('-', '_'): s_opt.dest
for s_opt in parser._actions if s_opt.option_strings}
arg_options = {opt_mapping.get(key, key): value for key, value in options.items()}
defaults = parser.parse_args(args=args) ****** THIS *****
defaults = dict(defaults._get_kwargs(), **arg_options)
# Move positional args out of options to mimic legacy optparse
args = defaults.pop('args',())
args
boş call_commands geçirilen pozisyonel argümanlar vardır. Sadece adlandırılmış argümanları geçiyorum. parser.parse_args
gerekli değişkenlerin eksik olduğunu şikayet ediyor.
Django 1.8.3 sürümündedir. Yayınladığınız kod parçası dayanarak
def add_arguments(self, parser):
parser.add_argument('--url', action='store', required=True)
parser.add_argument('--project', action='store', required=True)
parser.add_argument('--continue-processing', action='store_true', default=False)
parser.add_argument('--website', action='store', required=True)
parser.add_argument('--title', action='store', required=True)
parser.add_argument('--duplicate', action='store_true',default=False)
Komutunuzun kodunu göster (en azından 'option_list 'tanımları) – Anentropic
Add_arguments işlev kaynağı eklendi. – zmbq
'arg1 = '12', arg2 = 'abc', arg3 = 'zbb', arg4 = '12345' 'anahtar kelime args ile gerçekten çağırıyor musunuz? 'parser.add_argument (' - url ') 'seçeneği için argüman argümanının' url 'olması gerektiğinin farkında mısınız? – Anentropic