2017-11-28 1 views
0

python에 새롭다. 프랑스어로 어떤 영어 실수라도 유감스럽게 생각한다. :). 나는 argparse를 사용해야하는 곳에서 일하고있다. 내가 설정 모두 N과 다른 값으로 파일, 또는 단지 1 중을 설정하는 중 수있는 방법을 찾기 위해 노력하고있어 Argparse optionnal arguments with default values ​​

parser = argparse.ArgumentParser() 
parser.add_argument('--create n file', dest='create', nargs=2, 
default=(1,'world1.json'), help='Create a party of n player with mission parameters in file') 

mission.py : 여기에 내가 가진 문제를 가지고 코드입니다. n은 int이고 str은 파일이다.

파이썬 mission.py --create이 ## 예상 된 결과> 만들 = [2, 'world1.json']

파이썬 임무 : 여기

내가 다음 명령을 사용하여 좀하고 싶습니다 무엇 .py - 생성 world2.json # 예상 결과> create = [1, 'world2.json']

python mission.py - create 3 world2.json #expected result> create = [3, 'world2. json ']

--create가 사용되면 (n/파일 지정 여부에 관계없이) fu를 시작해야합니다. 리스트를 인수로 사용하는 함수.

여러 가지를 시도하고 argparse 문서를 두 번 이상 읽었지만이를 수행 할 방법을 찾을 수 없습니다.

도움 주셔서 감사합니다.

+0

'add_argument ('- create ', nargs ='+ ')'로 변경하십시오. 구문 분석 후에'args.create' 목록에있는 하나 이상의 문자열로 무엇을 할 지 결정하십시오. 'argparse'는 int와 str 타입의 혼합을 디코드하도록 설정되어 있지 않습니다. – hpaulj

+0

많은 일을하지 말고 시작 라이브러리를 사용하십시오. https://pypi.python.org/pypi/begins/0.9 – SteveJ

+0

@stevej, 어떻게 시작합니까? 이 요구 사항을 함수의 인수로 어떻게 표현합니까? – hpaulj

답변

1

아래 코드는 나열된 용도에 대한 예상 결과를 나타냅니다. 프로그램이 전달 된 첫 번째 인수에 대해 int 또는 문자열을 받아 들여야하므로 인수를 처리하기 위해 추가 함수를 사용하기로 결정했습니다.

"try"블록을 사용하여 진행하기 전에 단일 인수를 int로 구문 분석 할 수 있는지 확인합니다.

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('--create n file', dest='create', nargs='+', default=(1,'world1.json'), 
        help='Create a party of n player with mission parameters in file') 
args = parser.parse_args() 

def get_n_file(arg): 
    if len(arg)==1: 
     try: 
      i = int(arg[0]) 
      result = int(arg[0]), 'world'+str(arg[0])+'.json' 
     except: 
      s = arg[0] 
      result = 1, s 
     return result 
    elif len(arg)==2: 
     return int(arg[0]), arg[1] 

print(args.create) 

n, f = get_n_file(args.create) 

print(n, f)