Я проверил работу optcomplete
с модулем optparse
. Его пример представляет собой простой файл, поэтому я мог заставить его работать. Я также протестировал его с помощью модуля argparse
, так как предыдущий устарел. Но я действительно не понимаю, как и кем вызывается программа python при нажатии табуляции. Я подозреваю, что bash
вместе со строкой shebang
и модулем argparse
(или optparse
) каким-то образом задействованы. Я пытался понять это (сейчас прочитаю исходный код).
У меня немного более сложная структура программы, которая включает в себя оболочку вокруг фрагмента кода, обрабатывающего аргументы. Его создание argparse.ArgumentParser()
и вызовы add_argument()
, которые переклассифицированы в другой промежуточный модуль, чтобы избежать дублирования кода, и вызываемая оболочка, находятся внутри функции.
Я хочу понять, как это завершение табуляции работает между bash и python (или, если уж на то пошло, любым другим интерпретатором, например perl
).
ПРИМЕЧАНИЕ. У меня есть четкое представление о завершении bash (которое я узнал только сейчас), и я думаю, что понимаю пользовательское завершение bash (только).
ПРИМЕЧАНИЕ. Я читал другие подобные вопросы SO, и ни один из них не отвечает на этот вопрос.
Изменить: Вот функция bash.
Я уже понял, как модуль python узнает о словах, введенных в командной строке, путем чтения os.environ
значений переменных
$COMP_WORDS
$COMP_CWORD
$COMP_LINE
$COMP_POINT
$COMPREPLY
Эти переменные имеют значения только при нажатии табуляции. Мой вопрос в том, как запускается модуль python?
optcomplet
говорится: вам также необходимо создать функцию Bash, а затем сообщить Bash, чтобы инициировать завершение optcomplete для определенных программ, которые ее используют: Если вы это сделали, почему вы все еще спрашиваете, как это работает? Должно быть очевидно, что вам просто нужно указать bash, какую программу вызывать, если требуется завершение. - person Niklas B.   schedule 05.03.2012