Onglet achèvement en Python raw_input()
je sais que je peux faire pour obtenir l'effet de la saisie semi-automatique en python sûr.
import readline
COMMANDS = ['extra', 'extension', 'stuff', 'errors',
'email', 'foobar', 'foo']
def complete(text, state):
for cmd in COMMANDS:
if cmd.startswith(text):
if not state:
return cmd
else:
state -= 1
readline.parse_and_bind("tab: complete")
readline.set_completer(complete)
raw_input('Enter section name: ')
Je m'intéresse maintenant à faire de la saisie semi-automatique avec des répertoires. (/home/utilisateur/doc >onglet)
Comment puis-je faire une telle tâche?
Vous devez vous connecter pour publier un commentaire.
Voici un rapide exemple de la façon d'effectuer des différentiels de l'achèvement des chemins de système de fichiers. J'ai modifié votre exemple, de l'organisation dans une classe où les méthodes nommé
complete_[name]
indiquer de haut niveau des commandes.J'ai commutation de la fonction d'achèvement à usage interne readline tampon pour déterminer l'état de la réalisation globale, ce qui rend l'état logique d'un peu plus simple. Le chemin de l'achèvement est dans le
_complete_path(path)
méthode, et j'ai accroché jusqu'à la supplémentaire de commande pour effectuer chemin des compléments sur ses arguments.Je suis sûr que le code peut être simplifié, mais il devrait vous fournir un point de départ décent:
Utilisation:
Mise à jour Il va chemins d'accès complets à partir de la racine si l'utilisateur tape
/
:#python complete.py
Enter directory name: /home/<tab>
user1 user2 user3
/<tab>
il complète à partir de la racine, de sorte/home/<tab>
fonctionne. Je vais mettre à jour l'exemple. Vous êtes à la recherche pour le fichier de liste pour afficher uniquement les noms de fichiers?Ce qui est suffisant pour permettre construit dans l'onglet répertoire de remplir avec des raw_input():
/
si vous n'êtes pas actuellement dans/