pythonでコンソールアプリケーションを作る
時々コンソールアプリケーションを作りたいと思う時がある。 めったに作らないので毎回どうやって作っていたのか忘れてしまって、毎回調べているのでメモ代わりに記載しておく。
標準出力で渡されたJSONデータを整形して表示する
LinuxのコンソールでJSONを扱うのならjq使ったほうが便利なので作る意味はないと思う。
使ったライブラリ
click: コマンドラインパーサー
- python標準のargparseより使いやすくて便利
- 参考: Python: コマンドラインパーサの Click が便利すぎた
rich: python標準のprintを置き換えてより便利に表示することができるライブラリ
ソース
コンソールからcurlやcat等でパイプされて標準出力経由でJSONが渡されたときに整形して表示する。
#!/usr/bin/python3 import os import sys from json import JSONDecodeError from typing import Any, Dict import click from rich import print, print_json @click.command() @click.option("--indent", default=2, help="インデントの数") @click.option("--sort-keys", default=False, is_flag=False, help="JSONのキーでデータをソートして表示する") @click.option("--ensure-ascii", default=False, is_flag=False, help="ASCII文字以外をエスケープして表示する") def main(indent: int, sort_keys: bool, ensure_ascii: bool): try: line = sys.stdin.readlines() json_data = "".join(line) try: print_json(json=json_data, indent=indent, sort_keys=sort_keys, ensure_ascii=ensure_ascii) except JSONDecodeError as e: print(e) sys.exit() except BrokenPipeError: dev_null = os.open(os.devnull, os.O_WRONLY) os.dup2(dev_null, sys.stdout.fileno()) sys.exit(1) if __name__ == "__main__": main()