Dateinamen-Vervollständigung

Mit dem readline-Modul (auf Unix-artigen Betriebssystemen) gibt es die Möglichkeit, bei Benutzer-Eingaben von der Konsole eine Dateinamen-Vervollständigung wie in der Shell zu erreichen. Dazu muss man sich eine eigene Completer-Funktion programmieren, die die Vervollständigung eines Strings übernimmt:

   1 import dircache
   2 import os
   3 
   4 def completer(text, state):
   5     """Return the next possible completion for 'text'.
   6     This is called successively with state == 0, 1, 2, ... until it
   7     returns None.
   8     """
   9     completions = [];  #A list of all possible completions
  10     (the_dir, incomplete) = os.path.split(text);
  11     #A list of all files in the_dir:
  12     files = dircache.listdir(os.path.join(".", the_dir));
  13 
  14     #Find the entries of 'files' which match 'text':
  15     for entry in files:
  16         if entry.startswith(incomplete):
  17             if os.path.isdir(os.path.join(the_dir, entry)):
  18                 entry = os.path.join(entry, "");
  19             completions.append(os.path.join(the_dir, entry));
  20     return completions[state];

Importiert man das readline-Module, so ist die Konsolen-Eingabe (z.B. bei raw_input) um Editierfunktionen erweitert, wie man sie aus der Shell kennt. Um nun die Dateinamen-Vervollständigung mittels obiger Funktion zu aktivieren, nimmt man noch folgende Einstellungen vor:

   1 import readline
   2 readline.set_completer_delims("")
   3 readline.set_completer(completer)
   4 readline.parse_and_bind("tab: complete") #Vervollständigung mittels TAB

Dateinamen-Vervollständigung (last edited 2009-06-17 16:14:16 by localhost)