Как в утилитах командой строки реализуются собственно команды? Т.е. их же не запрашивают (если говорить о питоне например) input-ом и словарем? Почему-то ведь параметры утилиты выскакивают если нажать TAB? Как это делается? Хотел одну утилитку написать и вот думаю как по красивее сделать.
argparse работает отлично то что надо, а вот argparse никак работать не хочет :( Ну для начала я ее ставил pip install argcomplete (как в статье написано). Она поставилась, но подключаться отказалась "ImportError: No module named argcomplete". Я еще поставил на 3 питон (pip3 install). Там она тоже поставилась, но правда не ругалась на подключение, зато просто автокомплита - нет и все тут. Хотя я все как в статье сделал.
DarkByte2015: Ну, если бы сделали всё как в статье, то заработало бы :) Без вывода команд pip, и не зная ни какой shell (bash наверное?) и какой версии используется, трудно сказать в чём дело. Может быть во время установки произошла ошибка?
Вот пример скрипта с автодополнением:
#!/usr/bin/env python
# PYTHON_ARGCOMPLETE_OK
import argparse, argcomplete
from argcomplete.completers import ChoicesCompleter
from argcomplete.completers import EnvironCompleter
parser = argparse.ArgumentParser(description='Description of your program')
# параметр foo будем дополнять из переменный окружения, например
parser.add_argument('-f','--foo', help='Description for foo argument', required=True).completer = EnvironCompleter
# а параметр bar из фиксированного списка значений
parser.add_argument('-b','--bar', help='Description for bar argument', required=True, choices=('ololo', 'wololo', 'trololo'))
# для определения аргументов argcomplete будет выполнять часть скрипта до этой команды
argcomplete.autocomplete(parser)
args = vars(parser.parse_args())
# Просто печатаем распарсенные аргументы
print args
Вкратце, есть два способа включить автодополнение:
1) Глобальное. Запускаем activate-global-python-argcomplete
Он создает файл /etc/bash_completion.d/python-argcomplete.sh Добавляем в свой ~/.bashrc следующее source /etc/bash_completion.d/python-argcomplete.sh В скрипт, для которого нужно активировать автодополнение, добавляем в начале комментарий PYTHON_ARGCOMPLETE_OK Перезапускаем шелл или делаем source ~/.bashrc и вуа-ля!
2) Если нужно включить автодополнение только для данного скрипта в данной сессии, то достаточно выполнить eval "$(register-python-argcomplete имя_скрипта.py)"