Pythonにはいろいろと便利なモジュールが揃っているし平易で読みやすいので、バッチ処理のスクリプトや簡単なCLIアプリケーションを書くのにかなり適しています。

僕もふだんからちょっとした処理を検証したりするのに使うのですが、その際に便利な機能とかをまとめてテンプレートにしているので紹介します。

あわせて読みたい:

特徴的な機能をいかに示します:

  • tracebackとloggingでエラー内容を表示
  • argparseでloggingのデバッグレベルを変更可能
  • logging.FileHandlerを追加すればファイルにログ書き出しも可
  • with time_logger(“hogeohoge”) と書くだけでそのwithブロックの処理時間が出力される(contextmanager使用)

ソースコード:

# coding: utf-8
import logging
import traceback
import argparse
import time
from contextlib import contextmanage

logger = logging.getLogger(__name__)


@contextmanager
def time_logger(label):
    start = time.time()
    yield
    end = time.time()
    logger.info("{}: {:.3f} sec consumed.".format(label, end - start))


def main(args):
    with time_logger("1.first_process"):
        print("Hello, world!")


if __name__ == '__main__':
    # args
    parser = argparse.ArgumentParser(
        description="Awesome CLI.")
    parser.add_argument(
        "-d", "--debug", action="store_true", help="Debug mode.")
    args = parser.parse_args()

    # logger
    if args.debug:
        LOG_LEVEL = logging.DEBUG
    else:
        LOG_LEVEL = logging.INFO
    formatter = logging.Formatter(
        fmt="[%(asctime)s] %(levelname)s [%(name)s/%(funcName)s() at line %(lineno)d]: %(message)s", datefmt="%Y-%m-%d %H:%M:%S")
    logger.setLevel(LOG_LEVEL)
    # stdout
    stream_handler = logging.StreamHandler()
    stream_handler.setFormatter(formatter)
    stream_handler.setLevel(LOG_LEVEL)
    logger.addHandler(stream_handler)
    main(args)

更新はgistでやっていきます:

もっと良くできるアイデア等ありましたらぜひご意見ください。

関連記事

TinyWhoopバッテリーをモバイルバッテリーで充電しようの巻

カフェとかのフリーWiFiで「このサイトにアクセスできません」の対策

razer bladeのケースとかで良かったやつ

numpy.ndarray(bool)のTrue、False存在判定にinを使ってはならない

windows10にgpuサポートのxgboostを入れる

paypalのログインでwindows10がクラッシュする問題

コメント

コメントを返信する

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です