Ответ 1
Бесстыдная самореклама: https://github.com/kislyuk/argcomplete
argcomplete предоставляет bash завершение для argparse.
Я хотел бы получить автозаполнение в своих скриптах python также в аргументах.
Я никогда не понимал, как работает bash_completion (для аргументов), но после того, как я выкопал, я понял, что:
Второй момент, в частности, невелик, потому что я хотел бы, чтобы он автоматически сгенерировался.
Лучше всего было бы, чтобы оболочка запрашивала мою программу в каждой TAB о том, что делать, но у меня создается впечатление, что это действительно не работает, правильно ли это?
Второй вариант, вероятно, состоит в том, чтобы просто написать конвертер из анализатора argparse в правильную оболочку.
Бесстыдная самореклама: https://github.com/kislyuk/argcomplete
argcomplete предоставляет bash завершение для argparse.
Bash "завершение" действительно здорово. И легко для программ, написанных на Python....
Я думаю, что это именно то, что вы хотите: optcomplete: Self-Generator оболочки для Python. Он доступен, например, как пакет "python-optcomplete" в Ubuntu.
Вы вставляете несколько строк в свою программу python, и пользователь (один раз) запускает bash "полную" программу, чтобы сообщить bash, как выполнить аргументы:
complete -F _optcomplete <program>
и теперь пользователь завершил работу! По умолчанию это дает простое завершение программных опций. См. Пример, как настроить, как завершение работает для определенной опции. Он красиво написан и легко расширяется для обработки подкоманд, альтернативных вариантов завершения и т.д.!
Update:
Для завершения в zsh (для optparse и argparse) см. genzshcomp 0.3.1: Индекс пакетов Python
Как отмечалось в @englebip, нам все еще нужно что-то подобное для нового модуля argparse
, введенного в Python 2.7 и 3.2, так как optparse
теперь устарел.
Вот обсуждение движения в этом направлении:
См. также этот фон о том, как это делается: Как argpse (и устаревший optparse) реагируют на нажатие клавиши "tab" после имени программы python в bash? - Переполнение стека