2016-11-01 4 views
3

저는 docopt을 사용하여 파이썬에서 명령 행 입력을 구문 분석합니다.docopt에서 반복 요소를 구현하는 데 문제가 발생했습니다.

""" 
Usage: 
    docoptTest.py [options] 

Options: 
    -h --help    show this help message and exit 
    -n --name <name>   The name of the specified person 
""" 

가 그럼 난 docopt을 가져 인수를 구문 분석하여 프린트 :

-n --name <name>...  The name of the specified person 
:

from docopt import docopt 
args = docopt(__doc__) 
print(args) 

>>> python docoptTest.py -n asdf 
{'--help': False, 
'--name': 'asdf'} 

내가 입력에 두 개 이상의 이름을 허용하는 타원을 퍼팅 시도 내 문서화 문자열을

하지만 사용 오류가 있습니다.

""" 
Usage: 
    docoptTest.py [-n | --name <name>...] [options] 

Options: 
    -h --help    show this help message and exit 
    -n --name    The name of the specified person 
""" 

을하지만 출력은 --name이 플래그이라고 생각 : 그럼 초기 사용법 메시지에 타원을 넣어.

>>> python docoptTest.py -n asdf asdf 
{'--help': False, 
'--name': True, 
'<name>': ['asdf', 'asdf']} 

어떻게 수정합니까?

답변

1

이 표기 : 각 옵션은 하나의 인수를 걸립니다

>>> python docoptTest.py -n asdf asdf 

아마, docopt 작동하지 않습니다. 이런 식으로하고 싶다면 쉼표와 같은 구분 기호를 사용하고 직접 분리하십시오. 인수를 추가하면 문제가 발생합니다. 파서는 마지막으로 asdf을 옵션 또는 인수의 일부로 구별 할 수 없습니다. 어떤 사람들은 옵션과 그 인수 사이에 =을 붙입니다.

아마 당신은 대신을 시도 할 수 :

Usage: 
    docoptTest.py [-n|--name <name>]... [options] 

Options: 
    -h --help    show this help message and exit 
    -n --name <name>   The name of the specified person 

이 매우 비슷한 일을하는 매우 일반적인 방법입니다. docopt 사전은 다음과 같습니다.

$python docoptTest.py -n asdf -n ads 
{'--help': False, 
'--name': ['asdf', 'ads']} 
$python docoptTest.py --name asdf --name ads 
{'--help': False, 
'--name': ['asdf', 'ads']} 
+0

감사합니다. 이 문제는 근본적인 것입니까 (인수 또는 값이든 모호한 것입니까) 아니면 옵션 설명으로 할 수있는 다른 것이 있습니까? – PolarBearITS

+0

당신이 할 수있는 일은 그렇게 많지 않습니다. 나중에 나눌 수 있습니다. 당신은''asdf asf ''를''주위에''를 사용하여 하나의 인자로 간주 할 수 있으며, 직접 분리 할 수 ​​있습니다. docopt는 utilites에 대한 Open Groups 스펙을 따릅니다 : http://pubs.opengroup.org/onlinepubs /007908799/xbd/utilconv.html 이중 대시 옵션을 처리하는 방법은 설명되어 있지 않지만 모범 사례에 따라 처리 될 수 있습니다. –