python cmdモジュールの補完機能
pythonのcmdモジュールで、ファイル名の補完機能を付ける方法。 cmdモジュールは簡単にCUIのアプリが作れるし、コマンドの引数の補完機能を追加するのも簡単だ。
#!/usr/bin/env python | |
import cmd | |
import dircache | |
class MyCmd(cmd.Cmd): | |
def __init__(self): | |
cmd.Cmd.__init__(self) | |
self.prompt = '(MyCmd)' | |
def do_test(self, line): | |
print('cmd test ' + line) | |
def complete_test(self, text, line, begidx, endidx): | |
""" auto complete of file name. | |
""" | |
line = line.split() | |
if len(line) < 2: | |
filename = '' | |
path = './' | |
else: | |
path = line[1] | |
if '/' in path: | |
i = path.rfind('/') | |
filename = path[i+1:] | |
path = path[:i] | |
else: | |
filename = path | |
path = './' | |
ls = dircache.listdir(path) | |
ls = ls[:] # for overwrite in annotate. | |
dircache.annotate(path, ls) | |
if filename == '': | |
return ls | |
else: | |
return [f for f in ls if f.startswith(filename)] | |
if __name__ == '__main__': | |
mycmd = MyCmd() | |
mycmd.cmdloop() |
実行すると(MyCmd)というプロンプトが表示されてコマンド入力待ちになる。
TABキーを2回押すとコマンド候補が表示される。
(MyCmd) help test
testと打ってTABキーを押すと、カレントディレクトリのファイル名が候補に出てくる。
ディレクトリ名まで入力すると、そのディレクトリ内のファイルが候補に出てくる。