내 thebops
패키지 (pip install thebops
, https://bitbucket.org/therp/thebops)의 opo
모듈은 add_optval_option
기능을 포함한다. 이 옵션은 옵션없이 값을 사용하는 경우 사용할 값을 지정하는 추가 키워드 인수 empty
을 사용합니다. 옵션 문자열 중 하나가 명령 행에서 발견되면,이 값은 인수 목록에 삽입됩니다.
이 여전히 hackish하지만, 적어도 그것은 사용이 간편한 기능을 만든 ...
그것은 다음과 같은 상황에서 잘 작동은 :
- 인수 벡터는 이미 때 존재 옵션이 생성됩니다. 이것은 대개 사실입니다. 옵션 값 스포츠 인수가 주어진 값이 필요 내가 찾은
- 모든 프로그램은
--option=value
또는 -ovalue
보다는 --option value
또는 -o value
로 첨부합니다.
어쩌면 empty
인수를 지원하기 위해 thebops.optparse
을 조정할 것입니다. 하지만 회귀를 피하기 위해 먼저 테스트 스위트를 갖고 싶습니다. 원래는 Optik
/optparse
테스트를 사용하는 것이 좋습니다.
from sys import argv
def add_optval_option(pog, *args, **kwargs):
"""
Add an option which can be specified without a value;
in this case, the value (if given) must be contained
in the same argument as seen by the shell,
i.e.:
--option=VALUE, --option will work;
--option VALUE will *not* work
Arguments:
pog -- parser or group
empty -- the value to use when used without a value
Note:
If you specify a short option string as well, the syntax given by the
help will be wrong; -oVALUE will be supported, -o VALUE will not!
Thus it might be wise to create a separate option for the short
option strings (in a "hidden" group which isn't added to the parser after
being populated) and just mention it in the help string.
"""
if 'empty' in kwargs:
empty_val = kwargs.pop('empty')
# in this case it's a good idea to have a <default> value; this can be
# given by another option with the same <dest>, though
for i in range(1, len(argv)):
a = argv[i]
if a == '--':
break
if a in args:
argv.insert(i+1, empty_val)
break
pog.add_option(*args, **kwargs)
감사합니다, 속임수를 썼는지 :
이
는 코드입니다. 나는 dict를 만들고 None 유형을 제거하는 것보다 덜 해킹 된 방법이 있었으면 좋겠다. – Kyo