Python

[Python] ArgumentParserのhelpを標準エラー出力する。

More than 1 year has passed since last update.

Pythonでコマンドライン引数の制御やhelp表示に便利なArgumentParser

今回その出力を標準エラー(stderr)にしたかったのですが、そのようなオプションは無かったので

こうしました。


import sys
import argparse

# argparse.ArgumentParserのWrapperクラス
class MyArgumentParser(argparse.ArgumentParser):
def _print_message(self, message, file=None):
if message:
print(message, file=sys.stderr)

# メイン処理
def main():
parser = MyArgumentParser()
... Argment追加・設定処理 ...
args = parser.parse_args()

Wrapperクラス作って、_print_message をオーバーライド。

これでArgumentParserの出力が全て標準エラーに向かいます。

help、usage、error以外の出力は無いと思うので、全部標準エラーに向けて問題は無いはず。

下記コマンドで動作確認。

$ python test.py -h 1>/dev/null

→ 標準出力は捨てて、標準エラーはそのまま表示。
 → 表示される。

$ python test.py -h 2>/dev/null
→ 標準出力はそのまま出力、標準エラーは捨てる。
 → 表示されない。

別案として、

parser.parse_args() をコールする前に

-h--help が存在したら

parser.print_help(file=sys.stderr) をコールする

という方法も考えましたが、

add_help=False にして自力で処理を書かないといけないですよね。

それは色々と面倒だし、サブコマンドを使う場合は更に複雑になりそうなので。