мою программу Python можно запустить с помощью ряда различных опций (или подкоманд), например:
$ myProgram doSomething
$ myProgram doSomethingElse
$ myProgram nowDoSomethingDifferent
Я хочу, чтобы он использовал автозаполнение, чтобы, если я наберу «myProgram d», он вернет «myProgram doSomething», а если я наберу «myProgram n», он отобразит «myProgram nowDoSomethingDifferent». Это похоже на среднее использование модуля rlcompleter, но он выбирает возможные варианты завершения не из файловой системы (или из истории), а из настраиваемого набора строк (которые соответствуют доступным параметрам для моей программы)
Есть идеи, как это реализовать?
Мне известно о переменной PYTHONSTARTUP (которая должна указывать на файл, который я не знаю, как писать).
В качестве рабочего примера django-admin (из пакета django) имеет ту же самую функцию, которую я ищу.





Насколько я знаю, PYTHONSTARTUP предназначен для выполнения команд, когда интерпретатор запускает [1]. rlcompleter предназначен для автозаполнения внутри вашего скрипта, если он использует библиотеку readline. Что-то вроде этого:
$ ./myscript.py
My Script version 3.1415.
Enter your commands:
myscript> B<TAB>egin
myscript> E<TAB>nd
В вашем примере вы хотите завершить в командной строке оболочка. Это автозаполнение является функцией оболочки (bash или zsh, что бы вы ни использовали). См., Например, введение в автодополнение bash (также часть 2). Для zsh см., Например, это руководство.
Если я правильно понимаю, вам нужно завершить строку в командной строке до запуска вашего скрипта python. Тогда вам не следует искать решение на Python, а следует изучить функции оболочки.
Если вы используете bash, вы можете посмотреть / etc / bash_completion, и, по крайней мере, на debian / ubuntu вы должны создать файл в /etc/bash_completion.d/, который определяет завершение для вашей программы.
+1. Я бы пошел на это. Если у вас есть конечный набор доработок, настроить его очень просто. И это дает пользователю интерфейс, к которому они привыкли.
Если вы хотите, чтобы ваша программа выбирала параметр командной строки, даже если вы использовали только сокращенную форму этого параметра, вам следует взглянуть на модуль optparse в стандартной библиотеке.
Создайте файл «myprog-Завершение.bash» и поместите его в свой файл .bashrc. Что-то вроде этого, чтобы вы начали ...
_myProgram()
{
cur=${COMP_WORDS[COMP_CWORD]}
case "${cur}" in
d*) use = "doSomething" ;;
n*) use = "nowDoSomethingElse" ;;
esac
COMPREPLY=( $( compgen -W "$use" -- $cur ) )
}
complete -o default -o nospace -F _myProgram myProgram
Можно ли это использовать с псевдонимами? У меня есть суть, и я хочу автозаполнение на некоторых сайтах, таких как twitter google и т. д., Есть идеи?
Существует модуль optcomplete, который позволяет вам писать автодополнение для bash в вашей программе на Python. Это очень полезно в сочетании с optparse. Вы определяете свои аргументы только один раз, добавьте следующее в свой .bashrc
complete -F _optcomplete <program>
и все ваши варианты будут заполнены автоматически.
optparse не является устаревшим и заменяется на argparse. Предпочитать argcomplete: github.com/kislyuk/argcomplete
Как упоминалось в других ответах, в bash это можно сделать с помощью встроенного в bash complete. Проще, чем писать функцию (как в ответ Richq), использовать опцию complete-W, которая позволяет вам определять список слов. В вашем примере это будет:
complete -W "doSomething doSomethingElse nowDoSomethingDifferent" myProgram
Поскольку это однострочный файл, вам не нужно создавать для этого файл, но вы можете просто поместить его в свой .bashrc.
это вопрос bash. Вам придется настроить bash, чтобы он работал. Это не имеет ничего общего с питоном.