Ligne d'achèvement avec les commandes personnalisées
mon programme Python peut être lancé avec une gamme de différentes options (ou des sous-commandes) comme:
$ myProgram doSomething
$ myProgram doSomethingElse
$ myProgram nowDoSomethingDifferent
Je veux utiliser l'auto-complétion avec de sorte que si je tape "myProgram d" il retourne "myProgram doSomething" et si je tape "myProgram n" elle rend "myProgram nowDoSomethingDifferent". Ceci est similaire à l'utilisation moyenne du module rlcompleter, mais il n'est pas possible de choisir les options d'achèvement du système de fichiers (ou de l'histoire), mais à partir d'un ensemble de chaînes de caractères (qui correspondent à l'une des options disponibles pour mon programme)
Aucune idée sur la manière de mettre en œuvre cette?
Je suis conscient de la variable PYTHONSTARTUP (qui doit pointer vers un fichier je ne sais pas comment l'écrire).
Comme un exemple de travail, de django-admin (à partir de la django package) a exactement la même fonctionnalité que je suis à la recherche d'
- c'est un bash question. Vous devez personnaliser bash pour le faire fonctionner. Il n'a rien à voir avec python.
Vous devez vous connecter pour publier un commentaire.
Créer un fichier "myprog-achèvement.bash" et de la source dans votre .bashrc fichier. Quelque chose comme cela pour vous obtenir a commencé...
command not found: complete
=(Il y a le module optcomplete qui permet d'écrire la fin de bash auto-complétion de votre programme en python. Ceci est très utile en combinaison avec optparse. Vous ne définissez vos arguments une fois, ajoutez les lignes suivantes à votre .bashrc
et de toutes vos options sera complété automatiquement.
Comme mentionné dans d'autres réponses, en bash cela peut être fait avec le bash-builtin
complete
. Plus facile que d'écrire une fonction (comme dans richq réponse) est à l'aide decomplete
l'option de-W
qui vous permet de spécifier une liste de mots. Dans votre exemple, ce serait:Comme c'est un one-liner vous n'avez pas à créer un fichier pour cela, mais vous pouvez juste le mettre dans votre
.bashrc
.Si je comprends bien, vous voulez de la ligne de l'achèvement des travaux sur la ligne de commande avant de votre script python commence. Ensuite, vous ne devriez pas chercher un python solution, mais regardez les fonctionnalités d'environnement.
Si vous utilisez bash, vous pouvez regarder dans /etc/bash_completion, et au moins sur debian/ubuntu, vous devez créer un fichier dans /etc/bash_completion.d/qui spécifie les finitions de votre programme.
Ainsi que je sais, PYTHONSTARTUP est pour les commandes qui doivent être exécutées lorsque l'interprète démarre [1].
rlcompleter
est pour l'auto-complétion à l'intérieur de votre script, si c'est à l'aide dereadline
de la bibliothèque. Quelque chose comme ceci:Dans votre exemple, vous souhaitez terminer sur le shell ligne de commande. Cette auto-complétion est une fonction de coque (soit
bash
ouzsh
, tout ce que vous utilisez). Voir, par exemple, une introduction à bash d'auto-complétion (également partie 2). Pourzsh
voir, par exemple ce guide.Si vous voulez que votre programme pour sélectionner une option de ligne de commande même si vous n'utilisez qu'une forme abrégée de cette option, vous devriez jeter un oeil à la module optparse dans la bibliothèque standard.