Подтвердить что ты не робот

Python argparse и bash завершение

Я хотел бы получить автозаполнение в своих скриптах python также в аргументах.

Я никогда не понимал, как работает bash_completion (для аргументов), но после того, как я выкопал, я понял, что:

  • он использует "complete" для привязки функции завершения к команде
  • каждая завершающая функция в основном представляет собой копию парсера аргументов

Второй момент, в частности, невелик, потому что я хотел бы, чтобы он автоматически сгенерировался.

Лучше всего было бы, чтобы оболочка запрашивала мою программу в каждой TAB о том, что делать, но у меня создается впечатление, что это действительно не работает, правильно ли это?

Второй вариант, вероятно, состоит в том, чтобы просто написать конвертер из анализатора argparse в правильную оболочку.

4b9b3361

Ответ 2

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? - Переполнение стека