2017-02-17 2 views
1

argparse은 옵션의 인수에 유형 변환을 적용하고 기본값이 문자열 인 경우 이들의 기본값을 적용합니다. 그러나,이 위치 인수를 위해 그렇게하지 않는 것 같습니다 : 예상대로 내가 file--file에 변경하는 경우argparse를 위치 변환 인수의 기본값으로 유형 변환을 적용하려면 어떻게해야합니까?

import argparse as ap 

p = ap.ArgumentParser() 
p.add_argument('file', nargs='*', 
       metavar='FILE', 
       default='-', 
       type=ap.FileType(), 
       help='Input files. - is stdin. Default: %(default)s') 

print(p.parse_args([])) 
# Namespace(file='-') 
print(p.parse_args(['-'])) 
# Namespace(file=[<_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>]) 

(Ideone)

이 때문에 이러한 옵션 인수 것을는 default 값이 변환됩니다.

명시 적으로 argparse.FileType()('-')default으로 전달하는 것보다 나은 옵션이 있습니까?

답변

1

sys.argv에 넣는 값은 기본 운영 체제 구성이 C 문자 포인터이기 때문에 항상 str 개입니다. 그들을 다른 파이썬 유형으로 변환하려면 type이 필요합니다.

그러나 default의 값은 제한이 없습니다. 해당 키워드 인수에 대해 원하는 유형의 값을 사용할 수 있습니다.

p.add_argument('file', 
       nargs='*', 
       metavar='FILE', 
       default=[sys.stdin], 
       type=ap.FileType(), 
       help='Input files. - is stdin. Default: standard input') 

도움말을 수정했습니다. repr(sys.stdin)의 값을 얻는 것은별로 유용하지 않으며 사용자는 정확한 Python 객체를 지정하는 대신 기본값을 설명하여 혼동해서는 안됩니다.

+0

첫 부분은 충분히 이해하지만이 부분과 어떻게 관련이 있는지 알지 못합니다. 두 번째로, 내가 사용하는 기본 파일이''-''대신에''/ some/file''이라면 어떨까요? – muru

+0

'default = ap.FileType ('/ some/file')'. 기본값은 단순히 정의 된 유형에 의한 처리의 대상이 아닙니다. – chepner

+0

(무언가를 놓치지 않았는지 확인하기 위해 소스 코드를 확인하고 있습니다. 복잡한 프로세스입니다.) – chepner

관련 문제