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