PyInquirerメモ¶
Python Package¶
有名どころで下記の2点
現状¶
InquirerはWindowsではいくつかつらい不具合あり
(cmd以外でリストが移動できない、全般的に入力後の文字が消せないなど..)
PyInquirerはその様な不具合がなく
Windows Terminal、cmder、cmdなどでも正常に動作する為、
個人敵にPyInquirerをおすすめ
PyInquirer基本的な使い方¶
基本的にはInquirer、PyInquirerのどちらも
node.jsのInquirerを参考にしている為、似たような書き方で実現可能。
なぜかPyInquirer公式のexamplesがエラー出る為、実際の動きとサンプルを記載。
Yes/No形式¶
# -*- coding: utf-8 -*-
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import absolute_import
from __future__ import generators
from __future__ import division
from PyInquirer import prompt
question_description = [
{
"type": "confirm",
"message": "CLIの対話PyInquirerの紹介を見ますか?",
"name": "is_description",
"defalut": True
},
{
"type": "confirm",
"message": "本当にみますか?",
"name": "is_description",
"defalut": False,
"when": lambda answers: answers["is_description"]
}
]
answers = prompt(question_description)
print(answers)
テキスト入力形式¶
デフォルト値なども追加可能。
内容が日本語などだとCUIによってはUnicodeエスケープ表示になるやも
# -*- coding: utf-8 -*-
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import absolute_import
from __future__ import generators
from __future__ import division
from PyInquirer import prompt
questions_text = [
{
"name": "question_1",
"type": "input",
"message": "質問1",
"default": "デフォルトの値",
},
{
"name": "question_2",
"type": "input",
"message": "質問2",
"default": "デフォルトの値",
},
]
answers = prompt(questions_text)
print(answers)
リスト¶
一定の選択項目から選択
ただのリストで渡しているだけなので、自動生成した選択項目など入れやすい
# -*- coding: utf-8 -*-
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import absolute_import
from __future__ import generators
from __future__ import division
from PyInquirer import prompt
question_list = ["sample_01", "sample_02", "sample_03"]
questions_list = [
{
"type": "list",
"message": "リスト表示",
"name": "language",
"choices": question_list
},
]
answers = prompt(questions_list)
print(answers)
チェックリスト¶
Spaceでチェック、
(ショートカットAでトグル、Iで反転)
# -*- coding: utf-8 -*-
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import absolute_import
from __future__ import generators
from __future__ import division
from pprint import pprint
from PyInquirer import prompt, Separator
questions = [
{
"type": "checkbox",
"message": "チェックボックスサンプル",
"name": "check_box_sample",
"choices": [
Separator("= separator="),
{
"name": "sample_01"
},
Separator("= 特殊な操作 ="),
{
"name": "sample_02"
},
{
"name": "sample_03"
},
]
}
]
answers = prompt(questions)
print(answers)
Tips¶
whenによる組み合わせ¶
一つ前の以前の質問がTrueなら質問を続行したり質問、リスト等と混ぜることができる。
答えが辞書で返ってくるので、自前で分岐等も可能ですが、
一式質問等でまとめたりなどが可能。
from PyInquirer import prompt
question_list = ["sample_01", "sample_02", "sample_03"]
question_description = [
{
"type": "confirm",
"message": "CLIの対話PyInquirerの紹介を見ますか?",
"name": "is_description",
"defalut": True
},
{
"type": "list",
"message": "リスト表示",
"name": "language",
"choices": question_list,
"when": lambda answers: answers["is_description"]
},
]
answers = prompt(question_description)
print(answers)