1. ホーム
  2. python

Pythonでargparseを使ってオプションのstdinを指定する

2023-10-23 23:55:29

質問

私は非常に便利な構文を見つけました

parser.add_argument('-i', '--input-file', type=argparse.FileType('r'), default='-')

は入力ファイルを指定したり、標準入力を使用したりするためのもので、どちらも私のプログラムでは必要です。しかし、入力ファイルは常に必要というわけではありません。もし私が -i のうちの一つで入力をリダイレクトしていない場合は

$ someprog | my_python_prog
$ my_python_prog < inputfile

私はPythonのプログラムに入力を待ってほしくありません。私はそれがただ進み、デフォルト値を使用したい。

どのように解決するのですか?

標準ライブラリ argparseのドキュメント は、オプションの入出力ファイルを許可するために、この解決策を提案しています。

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
...                     default=sys.stdin)
>>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'),
...                     default=sys.stdout)
>>> parser.parse_args(['input.txt', 'output.txt'])
Namespace(infile=<_io.TextIOWrapper name='input.txt' encoding='UTF-8'>,
          outfile=<_io.TextIOWrapper name='output.txt' encoding='UTF-8'>)
>>> parser.parse_args([])
Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>,
          outfile=<_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>)