python script をコマンドラインから使う場合、設定ファイルを引数で指定したりするのだが、 色々なケースで使うようになると、 設定ファイルが増えてきて、 ファイル名の確認が面倒になっていた。
そこで、script 内にデフォルトディレクトリを指定しておいて、 globでファイル名リストを作成して、 コンソールで入力補完させてみては、というもの。
自分で考えた訳ではなく、 4 Python libraries for building great command-line user interfaces | Opensource.com を見て、prompt tool kit v2 のドキュメントを見ながらアレンジした次第。
fuzzyfinder は私のレベルでは、不要かもしれないが、 将来使うかもしれないので、一応、入れたままにした。 history は外した。で、こんな感じ。
スクリプトはこんなもん。
#!~/.pyenv/shims/python """Test of prompt-toolkit.""" # from pathlib import Path from fuzzyfinder import fuzzyfinder from prompt_toolkit import prompt from prompt_toolkit import print_formatted_text as pprint from prompt_toolkit.completion import Completer, Completion # from prompt_toolkit.history import FileHistory # from prompt_toolkit.auto_suggest import AutoSuggestFromHistory class MyfileCompleter(Completer): """Set Completer.""" def get_completions(self, document, complete_event): """Get Completer.""" globbed_path = Path('~/Documents/tours/_config_master').expanduser() inifile_list = [f.name for f in globbed_path.glob("*.ini")] word_before_cursor = document.get_word_before_cursor(WORD=True) matches = fuzzyfinder(word_before_cursor, inifile_list) for m in matches: yield Completion(m, start_position=-len(word_before_cursor)) def main(): """Main process.""" # user_input = prompt( 'Select set file >', # history=FileHistory('history.txt'), # auto_suggest=AutoSuggestFromHistory(), completer=MyfileCompleter(),) pprint('select "%s"' % user_input) if __name__ == '__main__': main() #
こんなインターフェースにしておけば、 設定ファイルの名前を冗長にできるかも、と思ってしまった。
0 件のコメント:
コメントを投稿