argparseが生成するusageは環境変数COLUMNSを見て適当に改行してくれる

タイトルそのままですが、気づいたのでメモ

import os
import argparse

parser = argparse.ArgumentParser()

parser.add_argument('source-file')
parser.add_argument('output-file')
parser.add_argument('-F')
parser.add_argument('-f')
parser.add_argument('-i')
parser.add_argument('-n')
parser.add_argument('-s')
parser.add_argument('-v')


for v in ["80", "30", "20"]:
    try:
        os.environ['COLUMNS'] = v
        print("*** COLUMNS is %s ***" % os.environ.get('COLUMNS'))
        args = parser.parse_args()
    except:
        pass

    print "\n"

出力

*** COLUMNS is 80 ***
usage: [-h] [-F F] [-f F] [-i I] [-n N] [-s S] [-v V] source-file output-file
: error: too few arguments


*** COLUMNS is 30 ***
usage:  [-h] [-F F] [-f F]
        [-i I] [-n N] [-s S]
        [-v V]
        source-file
        output-file
: error: too few arguments


*** COLUMNS is 20 ***
usage:  [-h]
        [-F F]
        [-f F]
        [-i I]
        [-n N]
        [-s S]
        [-v V]
        
        source-file
        output-file
: error: too few arguments


なのでusageをテストで確認したいなんてときは、ケース内で環境変数COLUMNSを設定するか、usageから改行やスペースを除去した結果を確認とかにしないと、環境によっては結果が変わる可能性がありますね