非常に便利な構文が見つかりました
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'>)