업데이트 2 : ArgParse 문서에서,
One of the more common uses of nargs='?' is to allow optional input and output files:
>>> 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
여러 파일 이름을 소요하기 때문이다. 0 또는 하나의 파일 이름을 원할 경우 nargs='?'
을 사용할 수 있습니다.
약간 가벼운 사양이 멋집니다. 질문은 무엇입니까? 게시물의 본문을 편집하여 솔루션에 포함 시키십시오. 그러면 사람들이 올바른 방향으로 여러분을 안내 할 것입니다. 고맙습니다. – bernie
지금 명령 행 옵션없이 프로그램 do.py를 실행하면 오류가 발생합니다. 인수가 너무 적습니다. 대신 파일 이름이 없더라도 여전히 실행하고 싶습니다. – p0lAris
필수 = 위치 지정에 대해 거짓이 작동하지 않습니다. – p0lAris