inquirer 라이브러리를 이용한 커맨드라인 기반 체크박스 만들기(Ruby/Python)

recon-raven 개발 중 커맨드라인 기반 체크박스(모듈같은거 고를 수 있도록..) 구성해보면 어떨까 해서 학생때 커맨드라인 기반 게임 만든 기억을 더듬으며 직접 만들다가 좋은 라이브러리를 찾아 쉽게 해결하였습니다.

오늘은 이를 쉽게 가능하게 해준 inquirer 라이브러리에 대해 이야기할까 합니다.

inquirer on ruby

inquirer은 Interactive user prompt를 구현을 위한 라이브러리로 루비, 파이썬, 자바스크립트 등 여러가지 언어를 지원하고 일반적인 사용자 입력 구현, 체크박스, 라디오 버튼 등 구현이 편리합니다. 전 Ruby를 많이 사용하기 때문에 Ruby 중점적으로 이야기를 드리겠습니다.

우선 gem을 통해 라이브러리를 설치해줍니다.

#> gem install inquirer

코드안에서 inquirer 로드 후 Ask class를 이용하여 user prompt를 구현하면 됩니다. 많이 사용하는 체크박스와 리스트를 보면..

require 'inquirer'

idx = Ask.list "선택해주세요", [ # 단일 선택
  "XSS",
  "CSRF",
  "XXE"
]
require 'inquirer'

idx = Ask.checkbox "선택해주세요", [ # 다중 선택 가능
  "XSS",
  "CSRF",
  "XXE"
]
< list >
< checkbox >

이런식으로 Ask의 checkbox, list 메소드를 이용해서 아래와 같이 커맨드라인에 구성할 수 있습니다. 여기서 list는 단일 선택만(마리 라디오 버튼처럼), checkbox는 다중 선택이 가능합니다. 선택은 space 키로 하며 enter 키로 confirm할 수 있습니다.

추가로 사용자로 부터 선택된 데이터는 idx에 array 형태로 저장됩니다. 이를 가지고 처리 로직에 활용하면 됩니다.

관련해서 추가적인 API 정보나 라이브러리 코드는 rubydoc이랑 github 웹 참고해주세요 :) https://www.rubydoc.info/gems/inquirer/0.2.1 https://github.com/arlimus/inquirer.rb

python..

루비랑 비슷비슷합니다. pip로 설치해주고 inquirer 객체에서 메소드로 실행하믄 됩니다.

#> pip install inquirer
import inquirer

questions = [inquirer.Checkbox(
    'interests',
    message="선택해주세요?",
    choices=['XSS', 'CSRF', 'SQLI', 'XXE', 'Deserialization', 'SSRF'],
)]
answers = inquirer.prompt(questions)  # returns a dict
print(answers['interests'])