argparse 모듈 인수없이 옵션을 추가하는 방법은 무엇입니까?


165

을 사용하여 스크립트를 만들었습니다 argparse.

스크립트는 옵션으로 구성 파일 이름을 가져와야하며, 사용자는 스크립트를 완전히 진행해야하는지 아니면 시뮬레이트 만해야하는지 지정할 수 있습니다.

전달할 인수 : ./script -f config_file -s또는 ./script -f config_file.

-f config_file 부분에는 문제가 없지만, 선택적이고 뒤 따르지 않아야하는 -s에 대한 인수를 계속 묻습니다.

나는 이것을 시도했다 :

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--file')
#parser.add_argument('-s', '--simulate', nargs = '0')
args = parser.parse_args()
if args.file:
    config_file = args.file
if args.set_in_prod:
        simulate = True
else:
    pass

다음과 같은 오류가 있습니다.

File "/usr/local/lib/python2.6/dist-packages/argparse.py", line 2169, in _get_nargs_pattern
nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs)
TypeError: can't multiply sequence by non-int of type 'str'

그리고 ''대신에 같은 errror 0.

답변:


233

@Felix 클링 제안 을 사용 action='store_true':

>>> from argparse import ArgumentParser
>>> p = ArgumentParser()
>>> _ = p.add_argument('-f', '--foo', action='store_true')
>>> args = p.parse_args()
>>> args.foo
False
>>> args = p.parse_args(['-f'])
>>> args.foo
True

97

설정된 값이 필요없는 옵션을 만들려면 action [문서] 로 그것을를 'store_const', 'store_true'또는 'store_false'.

예:

parser.add_argument('-s', '--simulate', action='store_true')

안녕하세요; 답장을 보내 주셔서 감사합니다. 나는 문서에서 설명 된대로 시도했다 : >>> parser.add_argument ( '-foo', '-f', action = 'store_true') _StoreTrueAction (option_strings = [ '-foo', '-f'], dest = 'foo', nargs = 0, const = True, default = False, type = None, choices = None, help = None, metavar = None) >>> parser.parse_args () 네임 스페이스 (foo = False) >> > print args.foo 역 추적 (가장 최근 호출) : <module>의 파일 "<stdin>", 1 행, AttributeError : 'Namespace'개체에 'foo'속성이 없습니다. >>>`작동하지 않는 것 같습니다. 할당 후 값을 검색하는 방법을 모르겠습니다. 도와 주셔서 감사합니다!
philippe

@ philippe : parser.parse_args()반환 값을 stackoverflow.com/questions/5262702/…에 바인딩하는 것을 잊었습니다.args
jfs

@ philippe : args = parser.parse_args()이미 코드에있는 것처럼. 주석 처리 된 행을 바꾸면 값으로에 액세스 할 수 있습니다 args.simulate.
Felix Kling
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.