오류는 단지 required=True
매개 변수 때문입니다. 메시지는 무엇이 잘못되었는지를 알려줍니다. 그것은해야한다 : 당신이 위치 인수를 '--infile'만든 반대로 '호출'이 infile
,에 의해
parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin)
. argparse
자체가 필요한지 여부를 결정합니다. nargs='?'
으로 입력해야합니다. 그것은 정의 적으로 선택 사항입니다 (그러나 optionals
아님).
FileType
유형을 사용하면 명령 줄에서 파일 (또는 '-')의 이름을 지정할 수 있습니다. 그것을 열고 (stdin은 이미 열려 있습니다) args.infile
속성에 지정합니다. 더 이상 아무것도하지 않습니다.
구문 분석 후 args.infile
을 사용하면이 열린 파일에 액세스 할 수 있습니다.이 파일은 필요에 따라 읽을 수 있으며 선택적으로 표준 입력이 아닌 경우 닫을 수도 있습니다.
이렇게하면 사용자가 코드에서 사용하기 위해 어떤 파일을 열어야하는지 지정할 수있는 편리한 방법입니다. 그것은 하나의 파일을 읽고, 뭔가하고, 다른 사람에게 글을 쓰는 간단한 스크립트를위한 것입니다.
그러나보고있는 사람이 모두 stdin
인 경우이 유형을 사용할 필요가 없습니다. sys.stdin
은 항상 읽을 수 있습니다. 그리고 파서가 stdin
으로 읽힐 수있는 방법이 없습니다. 명령 줄에서 오는 sys.argv
을 구문 분석합니다.
파서가 파일에서 명령 줄 문자열을 읽도록 지시하는 @
접두어 파일 기능이 있습니다. 파일을 구문 분석하고 값을 sys.argv
으로 연결합니다. argparse
문서를 참조하십시오.