「Python tips」の版間の差分

提供: Eospedia
移動: 案内検索
行17: 行17:
 
<pre>
 
<pre>
 
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
 
parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
 +
</pre>
 +
 +
== logging ==
 +
https://docs.python.org/release/3.8.2/library/logging.html
 +
=== ロガー生成スニペット ===
 +
<pre>
 +
logging_fmt = logging.Formatter(
 +
    '\n[%(asctime)s - %(name)s - %(levelname)s] %(message)s')
 +
logger = logging.getLogger(__name__)
 +
logger.setLevel(logging.DEBUG)
 +
stream_handler = logging.StreamHandler()
 +
stream_handler.setFormatter(logging_fmt)
 +
logger.addHandler(stream_handler)
 +
 +
 +
def set_logger(log_file, is_debug):
 +
    if log_file is not None:
 +
        log_file_dir = os.path.dirname(log_file)
 +
        if log_file_dir:
 +
            if not os.path.exists(log_file_dir):
 +
                logger.debug('Creating log file directory...')
 +
                os.makedirs(log_file_dir)
 +
            elif not os.path.isdir(log_file_dir):
 +
                logger.error('{} is not a directory.'.format(log_file_dir))
 +
                sys.exit(1)
 +
        file_handler = logging.FileHandler(log_file, mode='w')
 +
        file_handler.setFormatter(logging_fmt)
 +
        logger.addHandler(file_handler)
 +
 +
    if not is_debug:
 +
        logger.setLevel(logging.INFO)
 
</pre>
 
</pre>

2020年7月9日 (木) 03:21時点における版

argparse

https://docs.python.org/release/3.8.2/library/argparse.html

インスタンス化

モジュールdocstring書いといてそれをdescriptionにすると良さげ

parser = argparse.ArgumentParser(description=__doc__)

オプション名の書き方と格納先変数名

https://docs.python.org/release/3.8.2/library/argparse.html#dest

引数個数の指定

https://docs.python.org/release/3.8.2/library/argparse.html#nargs

ヘルプメッセージにデフォルト値を表示する

https://docs.python.org/release/3.8.2/library/argparse.html#argparse.ArgumentDefaultsHelpFormatter

parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)

logging

https://docs.python.org/release/3.8.2/library/logging.html

ロガー生成スニペット

logging_fmt = logging.Formatter(
    '\n[%(asctime)s - %(name)s - %(levelname)s] %(message)s')
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(logging_fmt)
logger.addHandler(stream_handler)


def set_logger(log_file, is_debug):
    if log_file is not None:
        log_file_dir = os.path.dirname(log_file)
        if log_file_dir:
            if not os.path.exists(log_file_dir):
                logger.debug('Creating log file directory...')
                os.makedirs(log_file_dir)
            elif not os.path.isdir(log_file_dir):
                logger.error('{} is not a directory.'.format(log_file_dir))
                sys.exit(1)
        file_handler = logging.FileHandler(log_file, mode='w')
        file_handler.setFormatter(logging_fmt)
        logger.addHandler(file_handler)

    if not is_debug:
        logger.setLevel(logging.INFO)