python 입문:argparse 분석 nargs='+'역할

11684 단어 pythonargparsenargs
긴 말 안 할 게 요.그냥 코드 보 세 요~

#aaa.py
#version 3.5
import os #      ,      markdown      ,     ,         [ ]
import argparse

parser = argparse.ArgumentParser(description='Process some integers...') #        
#parser.add_argument(    )
#__init__(self, option_strings, dest, nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None)
parser.add_argument('integers',metavar='N',type=int,nargs='+',
   help='an integer for the accumulator') 
   #      【    】
   #             ,         (parser.parse_args().integers*2)
 
parser.add_argument('--sum',dest='accumulate',action='store_const',
   const=sum,default=max,
   help='sum the integers(default:find the max)')
   #      【    】
   #            【       parser.parse_args().sum】【          :>python aaa.py --sum
 
args = parser.parse_args()
print(args)  #Namespace(accumulate=<built-in function sum>, integers2=[1, 2, 3, 4])
print(args.integers) #integers       
print(args.accumulate(args.integers)) #accumulate       

import argparse
def infer(args):
 for img in args.imgs:
 print("
=== {} ===".format(img)) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--imgs',type=str,nargs='+') args = parser.parse_args() infer(args)
결실

추가 지식:argparse 해석 명령 행 매개 변수
argparse 프로필:
argparse 에서 가장 많이 사용 되 는 것 은 상기 세 부분 입 니 다.Argument Parser 대상 을 만 듭 니 다.add 사용argument()방법 으로 만 든 Argument Parser 대상 에 argument 의 해석 규칙 을 추가 합 니 다.마지막 호출 parseargs()는 들 어 오 는 내용 을 분석 하고 두 번 째 단계 에서 제 정 된 규칙 에 따라 Namespace 대상 을 생 성 합 니 다.만약 에 파 라 메 터 를 전달 하지 않 으 면 parseargs(),그러면 기본적으로 sys.argv 에서 명령 행 입 참 을 가 져 옵 니 다.
Argument Parser 만 들 기:
함수 프로 토 타 입:
ArgumentParser(prog=None,usage=None,description=None,epilog=None, parents=[],formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None,conflict_handler='error', add_help=True)
1.prog:프로그램의 이름,기본 값 은 argv[0]입 니 다.설정 하면 도움말 정보 에서%(prog)s 를 포맷 된 참조 로 사용 할 수 있 습 니 다.
2.usage:정 보 를 돕 는 usage 필드,프로그램의 각종 용법 을 설명 합 니 다.기본 적 인 상황 에서 addargument()가 자동 으로 생 성 됩 니 다.
3.description:간단 한 설명 프로그램 이 주로 무엇 을 하고 어떻게 사용 하 는 문자 세그먼트 입 니 다.기본 값 은 비어 있 습 니 다.
4.epilog:optional arguments 문자 세그먼트 다음 문자 세그먼트 입 니 다.기본 값 은 비어 있 습 니 다.
5.parents:계승 한 부모 parser 는 일부 공공 내용 의 중복 정 의 를 피하 기 위해 부모 parser 는 초기 화 할 때 add 를 설정 합 니 다.help=False,부모 와 자식 parser 의-h 충돌 을 방지 하기 위해 이상 을 던 집 니 다.
6、formatter_class:help 출력 을 포맷 합 니 다.출력 스타일 을 제외 하고 Argument DefaultsHelpFormatter 로 설정 하면 help 출력 에 정 의 된 default 값 을 자동 으로 추가 합 니 다.
7、prefix_chars:options 앞의 문 자 는 기본적으로'-'입 니 다.'-+'와 같은 다른 문 자 를 추가 할 수 있 습 니 다.그러나'-'를 포함 하지 않 으 면'-h'와 같은 option 은 해석 할 수 없습니다.
8、fromfile_prefix_chars:parse 에 파일 을 사용 하기 도 합 니 다args()가 인 자 를 입력 합 니 다.예 를 들 어"demo.txt"와 같은 파일 문자열 을 식별 하기 위해 서 는 이 값 을 설정 해 야 합 니 다.예 를 들 어"@"과 같이 이 문 자 를 시작 으로 하 는 모든 문자열 이 파일 로 간주 되 기 때문에 parse 에 게 전 달 됩 니 다.args()의 인 자 는@demo.txt 일 것 입 니 다.이 파일 에서 한 줄 에 하나의 인자 만 있 을 수 있 습 니 다.파일 에 있 는'-fbar'는'-f','bar'로 해 석 됩 니 다.
9、argument_default:일반적인 상황 에서 기본 값 은 add 를 사용 합 니 다.argument()를 추가 하거나 set 를 사용 합 니 다.defaults()키 쌍 을 설정 하여 추가 합 니 다.나머지 한 가지 상황 은 이 항목 을 설정 하 는 것 입 니 다.
10、conflict_handler:해결 은 addargument()단계 에서 충돌 하 는 option 의 근거 전략 은 기본적으로 error 즉 이상 을 던 집 니 다.일반적인 상황 에서 충돌 이 발생 하면 이상 을 던 지면 됩 니 다.그러나 parents 가 설정 되 어 있 으 면 부모 parser 의 규칙 을 다시 써 야 할 때 이 항목 을 resolve 로 설정 해 야 합 니 다.그러나 다시 쓰 는 것 은 정확 한 일치 입 니 다.예 를 들 어 오래된 규칙 이-h/-help 를 정의 하고-h 를 다시 썼 습 니 다.그러면--help 는 오래된 규칙 입 니까?
11、add_help:-h/--helpoption 을 추가 할 지 여부 입 니 다.기본 값 은 True 입 니 다.False 를 위해 서 는 parent 를 해 야 합 니 다.기본 값 은-h/--help,만약 prefixchars 에'-'가 포함 되 어 있 지 않 으 면 첫 번 째 문자 로 대체 합 니 다.
add 호출argument()해석 규칙 추가:
함수 원형:
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][,metavar][, dest])
1.name or flags:위치 매개 변수 이 므 로 이름 을 입력 해 야 합 니 다.선택 할 수 있 는 매개 변 수 는'-f','-foo'와 같은 정의 가 필요 합 니 다.
2.action:들 어 오 는 매개 변 수 를 어떻게 처리 하 는 지 정의 합 니 다.
action='store',기본 값 을 추출 하여 들 어 오 는 인 자 를 저장 합 니 다.
action='store_const',const 를 추가 해 야 합 니 다.이 argument 의 값 은 명령 행 에서 입력 하지 않 고 const 의 값 을 가 져 옵 니 다.
action='store_true' or action='store_false','store_const'의 특수 한 상황 은 const 의 값 이 True 또는 False 임 을 의미 합 니 다.
action='append'는 들 어 오 는 값 이 목록 의 하나 로 서 option 이 명령 줄 에 여러 번 나타 날 수 있 음 을 의미 합 니 다.
action='append_const',목록 에 들 어 오 는 항목 은 const 에서 정의 합 니 다.보통 여러 개의 argument 가 목록 에 들 어 오 는 장면 에 사 용 됩 니 다.
action='count',출력 argument 가 나타 난 횟수 입 니 다.
action='help'가 기본적으로 추가 되 었 습 니 다.
action='version',version 을 정의 해 야 합 니 다.사용 시 버 전 정 보 를 출력 하고 종료 해 야 합 니 다.
사용자 정의,argparse.Action 하위 클래스 를 정의 하여 구현 합 니 다.실제로 위의 이 옵션 들 은 모두 이런 형식 으로 정 의 된 것 이다.
3.nargs:Argument Parser 대상 은 보통 하나의 동작 을 명령 행 인자 와 연결 합 니 다.nargs 키워드 매개 변 수 는 하나의 동작 을 서로 다른 수의 명령 행 매개 변수 와 연결 합 니 다.
nargs=N,한 옵션 을 선택 하면 여러 개의 매개 변수(action='append'일 때 도 하나의 옵션 뒤에 하나의 매개 변수 가 있 습 니 다.옵션 이 여러 번 나타 날 수 있 습 니 다).매개 변수의 개 수 는 N 의 값 이 어야 합 니 다.이 매개 변 수 는 하나의 목록 을 생 성 합 니 다.nargs=1 일 때 길이 가 1 인 목록 을 생 성 합 니 다.
nargs=?,명령 줄 에 대응 하 는 항목 이 나타 나 지 않 으 면 해당 하 는 항목 에 기본 값 을 부여 합 니 다.특수 한 것 은 옵션 에 대해 명령 줄 에 이 옵션 이 나타 나 지만 그 후에 할당 매개 변 수 를 따 르 지 않 으 면 이 옵션 은 할당 default 의 값 이 아니 라 할당 const 의 값 입 니 다.
nargs=*,N 과 유사 하지만 목록 길 이 는 정 해 지지 않 았 습 니 다.
nargs=+는*와 유사 하지만 대응 하 는 항목 에 인자 가 들 어 오지 않 았 을 때 error:too few arguments 를 잘못 알 립 니 다.
nargs=argparse.REMAINDER,모든 남 은 매개 변 수 는 하나의 목록 으로 바 뀌 어 이 항목 에 할당 합 니 다.보통 이 방법 으로 남 은 매개 변 수 를 다른 parser 에 전송 하여 분석 합 니 다.nargs 가 정의 되 지 않 으 면 들 어 갈 수 있 는 매개 변수의 수량 은 action 에 의 해 결정 되 며,일반적으로 하나의 길이 의 목록 이 생 성 되 지 않 습 니 다.
4,const,하 나 는 정의 action='storeconst'또는 action='appendconst'시 사용.하 나 는 정의 nargs=?명령 줄 에 옵션 이 나타 날 수 있 으 나,이후 에 값 을 부여 하 는 매개 변 수 를 따 르 지 않 고 기본 값 으로 이 옵션 에 전 달 됩 니 다.
5.default:기본 값.
문자열 이 라면 Parser 가 해석 할 때 명령 행 으로 입력 하고 type 의 값 으로 형식 을 변환 하지만 그렇지 않 으 면 형식 변환 대신 정 의 된 값 을 사용 합 니 다.nargs='?'또는 nargs='*',이 항목 에 인자 할당 이 없 을 때 default 정의 값 을 사용 합 니 다.
반면 default=argparse.SUPPESS 는 명령 행 에 하나 도 나타 나 지 않 았 을 때 기본 값 을 부여 하지 않 는 다 는 뜻 이다.
6.type:유형 검사 와 유형 변환 에 사용 합 니 다.
FileType 을 사용 하면 파일 작업 을 간소화 할 수 있 습 니 다.함수 도 사용자 정의 할 수 있 습 니 다.입력 은 문자열 이 고 출력 은 변 환 된 문자열 입 니 다.choices 를 설정 할 때 유형 검사 가 쉬 워 집 니 다.한 범위 내 에서 만 비교 하면 되 기 때 문 입 니 다.
7.choices:수치 범 위 를 정 했 고 오 류 를 보고 할 수 있 습 니 다.
type 에 도 정의 가 있 을 때 type 을 사용 하여 유형 검 사 를 하기 때문에 choices 에서 의 수 치 는 type 의 정의 에 부합 되 어야 합 니 다.그렇지 않 으 면 parseargs()시 잘못 보고 합 니 다.in 연산 자 를 지원 하 는 모든 것 은 choices 의 할당 으로 사용 할 수 있 기 때문에 사전,목록,집합 등 다른 용 기 는 모두 지원 합 니 다.
8.required:기본 적 인 상황 에서 옵션(앞 에'-'가 있 음)은 명령 행 인자 에 꼭 나타 나 야 하 는 것 은 아니 지만 required=True 를 설정 하면 반드시 나타 나 야 합 니 다.이런 설정 은 사람의 상식 에 어 긋 나 므 로 사용 을 피해 야 한다.
9.help:도움말 정보.
앞서 언급 한%(prog)s 는 이 프로그램 이름 의 포맷 에 사용 할 수 있 으 며,%(default)s 포맷 default 의 값,%(type)s 포맷 type 의 값 도 있 습 니 다.
argparse.SUPPRESS 로 설정 하면 도움말 정 보 를 표시 하지 않 습 니 다.
10.metavar:Parser 에서 도움말 정 보 를 생 성 할 때 입력 해 야 할 값 을 나타 내 는 문자 가 필요 합 니 다.(이 단락 은 dest 와 마찬가지 로 dest 의 값 을 사용 합 니 다)위치 매개 변수 라면 그 자체 로 대체 합 니 다.선택 가능 한 인자 라면 대문자 로 대체 합 니 다.metavar 를 사용 하면 기본 문 자 를 바 꿀 수 있 습 니 다.
11.dest:대부분의 옵션 은 명령 행 을 통 해 값 을 부여 해 야 합 니 다.이 값 의 이름 은 dest 를 통 해 정 의 됩 니 다.기본 규칙 은 metavar 에서 말 한 것 과 같 습 니 다.
parse 호출args()해석
함수 원형:
ArgumentParser.parse_args(args=None, namespace=None)
args 를 namespace 대상 의 값 으로 변환 합 니 다.기본 적 인 상황 에서 sys.argv 는 args 에 값 을 부여 하고 빈 Namespace 대상 이 생 성 됩 니 다.분석 할 때 들 어 오 는 매개 변 수 를 검사 하고 요구 에 부합 되 지 않 으 면 잘못 보고 합 니 다.일반적으로 들 어 오 는 값 이 선택 가능 한 매개 변수 인지 음수 인지 자동 으로 판단 합 니 다(모두'-'로 시작 합 니 다).그러나 때때로 위치 매개 변수의 값 은'-'시작 값 이 어야 합 니 다.예 를 들 어'-f'와 같이 parser.parse 를 사용 해 야 합 니 다.args('-','-f'),'-'는 후속 적 인 모든 입력 값 을 위치 매개 변수 로 봐 야 합 니 다.parse_args()는 채 워 진 Namespace 대상 을 되 돌려 줍 니 다.
실례:
faster rcnn 코드 의 명령 행 해석 을 예 로 들 면:

#coding=utf-8
import argparse
import sys
 
def parse_args():
 parser = argparse.ArgumentParser(description='Train a Fast R-CNN network')
 parser.add_argument('--cfg', dest='cfg_file',help='optional config file',default=None, type=str)
 parser.add_argument('--weight', dest='weight',help='initialize with pretrained model weights',type=str)
 parser.add_argument('--imdb', dest='imdb_name',help='dataset to train on',default='voc_2007_trainval', type=str)
 parser.add_argument('--imdbval', dest='imdbval_name',help='dataset to validate on',default='voc_2007_test', type=str)
 parser.add_argument('--iters', dest='max_iters',help='number of iterations to train',default=70000, type=int)
 parser.add_argument('--tag', dest='tag',help='tag of the model',default=None, type=str)
 parser.add_argument('--net', dest='net',help='vgg16, res50, res101, res152, mobile',default='res50', type=str)
 parser.add_argument('--set', dest='set_cfgs',help='set config keys', default=None,nargs=argparse.REMAINDER)
 
 if len(sys.argv) == 1:
 parser.print_help()
 sys.exit(1)
 args = parser.parse_args()
 return args
 
if __name__ == '__main__':
 args = parse_args()
 print(args)
위 코드 를 test.py 로 저장 하고 명령 행 에 입력 하 십시오:python test.py
결 과 는:

usage: test.py [-h] [--cfg CFG_FILE] [--weight WEIGHT] [--imdb IMDB_NAME]
  [--imdbval IMDBVAL_NAME] [--iters MAX_ITERS] [--tag TAG]
  [--net NET] [--set ...]

Train a Fast R-CNN network

optional arguments:
 -h, --help  show this help message and exit
 --cfg CFG_FILE optional config file
 --weight WEIGHT initialize with pretrained model weights
 --imdb IMDB_NAME dataset to train on
 --imdbval IMDBVAL_NAME
   dataset to validate on
 --iters MAX_ITERS number of iterations to train
 --tag TAG  tag of the model
 --net NET  vgg16, res50, res101, res152, mobile
 --set ...  set config keys
명령 줄 에 입력:

python test.py --weight data/imagenet_weights/vgg16.ckpt \
 --imdb voc_2007_trainval \
 --imdbval voc_2007_test \
 --iters 7000 \
 --cfg experiments/cfgs/vgg16.yml \
 --net vgg16  \
 --set ANCHOR_SCALES "[8,16,32]" ANCHOR_RATIOS "[0.5,1,2]" TRAIN.STEPSIZE "[50000]"
결 과 는:
Namespace(cfg_file='experiments/cfgs/vgg16.yml',imdb_name='voc_2007_trainval',imdbval_name='voc_2007_test', max_iters=7000, net='vgg16', set_cfgs=['ANCHOR_SCALES', '[8,16,32]', 'ANCHOR_RATIOS', '[0.5,1,2]', 'TRAIN.STEPSIZE', '[50000]'], tag=None, weight='data/imagenet_weights/vgg16.ckpt')
이상 의 python 입문:argparse 는 nargs='+'역할 은 바로 편집장 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 많은 응원 을 바 랍 니 다.

좋은 웹페이지 즐겨찾기