更新2: ArgParseドキュメントから、
nargs ='?'のより一般的な使用法の1つ オプションの入力ファイルと出力ファイルを許可することです。
>>> 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=<open file 'input.txt', mode 'r' at 0x...>,
outfile=<open file 'output.txt', mode 'w' at 0x...>)
>>> parser.parse_args([])
Namespace(infile=<open file '<stdin>', mode 'r' at 0x...>,
outfile=<open file '<stdout>', mode 'w' at 0x...>)
元の答え:
これは簡単です。デフォルト値と。を使用して位置引数を追加するだけですnargs='*'
。引数がゼロの場合はデフォルト値が使用され、それ以外の場合はコマンドラインの引数が使用されます。
>>> p = argparse.ArgumentParser()
>>> p.add_argument('filename', nargs='*', default=['-'])
>>> p.parse_args([])
Namespace(filename=['-'])
>>> p.parse_args(['abc'])
Namespace(filename=['abc'])
通常、-
標準入力/標準出力を参照するために使用されます。
次に、次のようなことを行います。
def get_inputs(ns):
"""Iterate over input files."""
for path in ns.filename:
if path == '-':
yield sys.stdin
else:
yield open(path, 'r')
更新:複数のファイル名を使用するため、複数のファイル名が必要だと思いましcat
た。nargs='?'
ゼロまたは1つのファイル名が必要な場合に使用できます。