LoginSignup
0
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-09-29

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 にして自力で処理を書かないといけないですよね。
それは色々と面倒だし、サブコマンドを使う場合は更に複雑になりそうなので。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0