argparse 선택적 인수가 설정되었는지 확인하십시오.
선택적 argparse 인수가 사용자에 의해 설정되었는지 확인하고 싶습니다.
isset을 사용하여 안전하게 확인할 수 있습니까?
이 같은:
if(isset(args.myArg)):
#do something
else:
#do something else
이것은 float / int / string 유형 인수에 대해 동일하게 작동합니까?
기본 매개 변수를 설정하고 확인할 수 있습니다 (예 : myArg = -1 설정, 문자열의 경우 ""또는 "NOT_SET"). 그러나 궁극적으로 사용하려는 값은 나중에 스크립트에서 계산됩니다. 따라서 기본값으로 -1로 설정 한 다음 나중에 다른 것으로 업데이트합니다. 이것은 단순히 사용자가 값을 설정했는지 확인하는 것과 비교할 때 약간 어색해 보입니다.
선택적 인수 (로 지정 --
)가 None
제공되지 않으면 초기화 되었다고 생각합니다 . 따라서 is not None
. 아래 예를 시도해보십시오.
import argparse as ap
def main():
parser = ap.ArgumentParser(description="My Script")
parser.add_argument("--myArg")
args, leftovers = parser.parse_known_args()
if args.myArg is not None:
print "myArg has been set (value is %s)" % args.myArg
@Honza가 지적했듯이 is None
좋은 테스트입니다. 기본값 default
이며 사용자는이를 복제하는 문자열을 제공 할 수 없습니다.
다른을 지정 default='mydefaultvalue
하고이를 테스트 할 수 있습니다 . 하지만 사용자가 해당 문자열을 지정하면 어떻게 될까요? 설정으로 간주됩니까?
을 지정할 수도 있습니다 default=argparse.SUPPRESS
. 그러면 사용자가 인수를 사용하지 않으면 args
네임 스페이스에 나타나지 않습니다 . 그러나 테스트는 더 복잡 할 수 있습니다.
args.foo # raises an AttributeError
hasattr(args, 'foo') # returns False
getattr(args, 'foo', 'other') # returns 'other'
내부적으로 parser
는 목록을 유지하고 seen_actions
'필수'및 '상호 배타적'테스트에 사용합니다. 하지만 외부에서는 사용할 수 없습니다 parse_args
.
옵션 default=argparse.SUPPRESS
을 사용하는 것이 가장 합리적 이라고 생각합니다 . 그런 다음 인수가인지 확인하는 대신 not None
인수가 in
결과 네임 스페이스 인지 확인합니다 .
예:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--foo", default=argparse.SUPPRESS)
ns = parser.parse_args()
print("Parsed arguments: {}".format(ns))
print("foo in namespace?: {}".format("foo" in ns))
용법:
$ python argparse_test.py --foo 1
Parsed arguments: Namespace(foo='1')
foo in namespace?: True
인수가 제공되지 않습니다.
$ python argparse_test.py
Parsed arguments: Namespace()
foo in namespace?: False
store_true
및 store_false
인수 작업 옵션을 사용하여 선택적으로 전달 된 플래그를 확인할 수 있습니다 .
import argparse
argparser = argparse.ArgumentParser()
argparser.add_argument('-flag', dest='flag_exists', action='store_true')
print argparser.parse_args([])
# Namespace(flag_exists=False)
print argparser.parse_args(['-flag'])
# Namespace(flag_exists=True)
이렇게하면 조건부 검사에 대해 걱정할 필요가 없습니다 is not None
. 당신은 단순히 확인 True
하거나 False
. 여기 문서에서 이러한 옵션에 대해 자세히 알아 보세요.
인수가 위치 적 이면 (즉, "-"또는 "-"접두사, 인수, 일반적으로 파일 이름 만 있음) nargs 매개 변수 를 사용 하여 다음을 수행 할 수 있습니다 .
parser = argparse.ArgumentParser(description='Foo is a program that does things')
parser.add_argument('filename', nargs='?')
args = parser.parse_args()
if args.filename is not None:
print('The file name is {}'.format(args.filename))
else:
print('Oh well ; No args, no problems')
다음은 내가 argparse 변수를 사용하고 있는지 확인하는 내 솔루션입니다.
import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-1", "--first", required=True)
ap.add_argument("-2", "--second", required=True)
ap.add_argument("-3", "--third", required=False)
# Combine all arguments into a list called args
args = vars(ap.parse_args())
if args["third"] is not None:
# do something
This might give more insight to the above answer which I used and adapted to work for my program.
참고URL : https://stackoverflow.com/questions/30487767/check-if-argparse-optional-argument-is-set-or-not
'IT story' 카테고리의 다른 글
requirejs를 사용하여 jQuery 플러그인을로드 가능하게 만드는 방법 (0) | 2020.09.11 |
---|---|
파이썬 matplotlib에서 (x, y) 좌표 목록 플로팅 (0) | 2020.09.11 |
Pandas DataFrame : 조건에 따라 열의 모든 값을 바꿉니다. (0) | 2020.09.11 |
AVPlayer 및 MPMoviePlayerController 차이점 (0) | 2020.09.11 |
Entity Framework가 너무 느립니다. (0) | 2020.09.11 |