如何在 python raw_input 中使用 tab 键补全?
ringa_lee
ringa_lee 2017-04-18 09:16:38
0
2
638

如何在 python raw_input 中使用 tab 键补全?

ringa_lee
ringa_lee

ringa_lee

répondre à tous(2)
黄舟

Lancer des briques

Utilisez readline, voici un exemple simple :

import readline

CMD = ['foo1', 'foo2', 'bar1', 'bar2', 'exit']

def completer(text, state):
    options = [cmd for cmd in CMD if cmd.startswith(text)]
    if state < len(options):
        return options[state]
    else:
        return None

readline.parse_and_bind("tab: complete")
readline.set_completer(completer)

while True:
    cmd = raw_input('==> ')
    if cmd=='exit':
        break
    print(cmd)

Test :

==> <TAB><TAB>
bar1  bar2  exit  foo1  foo2
==> b<TAB>
==> bar
==> bar<TAB><TAB>
bar1  bar2  
==> bar1
bar1
==> exit

  • python - ligne de lecture

  • Bibliothèque GNU Readline


Présentation du jade

En fait, je ne comprends pas complètement le principe de fonctionnement de Completer, en particulier la partie state. J'espère que quelqu'un pourra l'expliquer. Merci beaucoup !


Questions auxquelles j'ai répondu : Python-QA

伊谢尔伦

http://stackoverflow.com/ques...
Ce code est bien écrit Si vous souhaitez compléter le deuxième paramètre, vous devez écrire votre propre fonction complète similaire au code suivant.

    def complete_cd(self, *args):
        cwd = CURRENT_PATH
        results = [c for c in os.listdir(cwd) if c.startswith(args[0][0])]
        return results

ps : Le document officiel dit :

    Note The underlying Readline library API may be implemented by the libedit library instead of GNU readline. On MacOS X the readline module detects which library is being used at run time.
    The configuration file for libedit is different from that of GNU readline. If you programmatically load configuration strings you can check for the text “libedit” in readline.__doc__ to differentiate between GNU readline and libedit.

所以在 MAC 和 Windows 上面不适用

Si vous souhaitez l'utiliser sur toutes les plateformes (Windows n'est pas testé), utilisez le code de chargement suivant

try:
    import readline
except ImportError:
    try:
        import pyreadline as readline
        # throw open a browser if we fail both readline and pyreadline
    except ImportError:
        import webbrowser
        webbrowser.open("http://ipython.scipy.org/moin/PyReadline/Intro#line-36")
        # throw open a browser
    #pass
else:
    import rlcompleter
    if(sys.platform == 'darwin'):
        readline.parse_and_bind ("bind ^I rl_complete")
    else:
        readline.parse_and_bind("tab: complete")
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!