Programing

argparse를 사용하는 Python의 선택적 stdin

crosscheck 2020. 12. 4. 07:54
반응형

argparse를 사용하는 Python의 선택적 stdin


매우 유용한 구문을 찾았습니다.

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

입력 파일을 지정하거나 stdin을 사용하기 위해 – 둘 다 내 프로그램에서 원합니다. 그러나 입력 파일이 항상 필요한 것은 아닙니다. 다음 -i중 하나로 입력을 사용 하거나 리디렉션 하지 않는 경우

$ someprog | my_python_prog
$ my_python_prog < inputfile

파이썬 프로그램이 입력을 기다리지 않기를 바랍니다. 그냥 따라 가서 기본값을 사용하기를 원합니다.


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'>)

isatty사용 하여 프로그램이 대화 형 세션에 있는지 또는 파일에서 읽는지 감지 합니다.

if not sys.stdin.isatty(): # Not an interactive device.
  # ... read from stdin

그러나 일관성과 재현성을 위해 표준을 따르고 파일 이름이 -. 당신은 수 있도록하는 것이 좋습니다 fileinput모듈 핸들이 있습니다.

참고 URL : https://stackoverflow.com/questions/7576525/optional-stdin-in-python-with-argparse

반응형