skydum

個人的な作業記録とか備忘録代わりのメモ

pythonでコンソールアプリケーション

pythonでコンソールアプリケーションを作る

時々コンソールアプリケーションを作りたいと思う時がある。 めったに作らないので毎回どうやって作っていたのか忘れてしまって、毎回調べているのでメモ代わりに記載しておく。

標準出力で渡されたJSONデータを整形して表示する

LinuxのコンソールでJSONを扱うのならjq使ったほうが便利なので作る意味はないと思う。

使ったライブラリ

ソース

コンソールから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()