Я следовал примеру из документации Click для реализации пользовательских мультикоманд, а затем я хочу объединить это с поддержкой завершения Bash, как описано здесь а>. Результат, когда я пытаюсь завершить с помощью TAB, заключается в том, что «cli» вставляется после имени моей программы вместо пользовательских команд...
$ mycommand <Press TAB 2x>
$ mycommand cli
Не то чтобы ни одна из моих пользовательских мультикоманд не называлась «cli».
Есть ли способ обойти это?
(Копия пользовательского примера кода с несколькими командами ниже)
import click
import os
plugin_folder = os.path.join(os.path.dirname(__file__), 'commands')
class MyCLI(click.MultiCommand):
def list_commands(self, ctx):
rv = []
for filename in os.listdir(plugin_folder):
if filename.endswith('.py'):
rv.append(filename[:-3])
rv.sort()
return rv
def get_command(self, ctx, name):
ns = {}
fn = os.path.join(plugin_folder, name + '.py')
with open(fn) as f:
code = compile(f.read(), fn, 'exec')
eval(code, ns, ns)
return ns['cli']
cli = MyCLI(help='This tool\'s subcommands are loaded from a '
'plugin folder dynamically.')
if __name__ == '__main__':
cli()