2

私はcmd pythonモジュールで遊んでいて、テキスト補完機能を見ていました。「〜」をホームディレクトリに展開/認識できるようにしようとしましたが、役に立ちませんでした。

completedefault(self, *ignored)cmd モジュールのメソッドをオーバーライドすることで、デフォルトの補完を処理できることに気付きました。ignoredtext、line、begidx、endidx のタプルです。コマンドを入力するとmy_command ./foldertextパラメーターは「./folder」になり、これは次のようなことができることを意味glob.glob(text + '*')します。これは、そのフォルダー内のすべてのファイルのリストを返します。ただし、my_command ~/folder変数textにのみが含まれるようになった場合、そのフォルダーの絶対パスを特定して、そのフォルダー内のすべてのファイルを表示するため/folderに使用することはできません。os.path.expanduser(text)

基本的に、誰かがパスを拡張するために正しい方向に向けることができるかどうか疑問に思って~います。

4

1 に答える 1

2

からの回答の拡張: https://stackoverflow.com/a/6657975/1263565

cmd モジュールのcompletedefault()メソッドを次のようにオーバーライドできます。

def completedefault(self, *ignored):
        # Set the autocomplete preferences
        readline.set_completer_delims(' \t\n;')
        readline.parse_and_bind("tab: complete")
        readline.set_completer(complete)

完全なメソッドは次のようになります。

def complete(text, state):
    return (glob.glob(os.path.expanduser(text)+'*')+[None])[state]

これで~拡張が可能になります。

于 2014-02-12T10:58:50.413 に答える