2013-03-30 4 views
4

나는 수출, 수입 및 데이터베이스와의 비교를위한 간단한 파이썬 스크립트를 작성 중이다. 사용자가 스크립트를 실행하려는 "모드"를 제공하게하고, 내 옵션으로 가져 오기, 내보내기 및 diff를 선택했습니다. argparse를 통해 실행할 때 파싱 된 모든 옵션은 args로 끝나며 arg.export 또는 args.diff를 사용하여 액세스 할 수 있지만 "가져 오기"는 키워드이므로 문제가 발생합니다.argparse에서 옵션으로 파이썬 키워드 사용하기

해결할 수있는 몇 가지 해결 방법이 있지만 작동 여부를 확인하고 싶습니다. 예를 들어 "exp", "imp"및 "diff"옵션을 줄이거 나 "가져 오기", "내보내기"또는 "diff"를 전달할 "모드"옵션을 사용할 수 있습니다.

내 현재 코드 :

parser = argparse.ArgumentParser() 

group = parser.add_mutually_exclusive_group() 
group.add_argument("--export", help="Export source(s)", action="store_true") 
group.add_argument("--import", help="Import source(s)", action="store_true") 
group.add_argument("--diff", help="Diff sources", action="store_true") 

parser.add_argument("filename", help="XML Filename used for exporting to, importing from or comparing while doing diff.") 

args = parser.parse_args() 

if args.export: 
    export_sources(args.filename) 
elif args.import: 
    import_sources(args.filename) 
elif args.diff: 
    diff_sources(args.filename) 

답변

4

좋아, "이명 령"을 사용하여, 나는 아직도 --import 사용할 수 있지만 내부적으로 "꼬마 도깨비"로 이동 한 경우.

parser = argparse.ArgumentParser() 
parser.add_argument('--import') 
args = parser.parse_args() 
import_value = getattr(args, 'import', None) # defaults to None 

또는 인수의 존재를 확인하고 변수로 읽어 :

parser = argparse.ArgumentParser() 

group = parser.add_mutually_exclusive_group() 
group.add_argument("--export", help="Export source(s)", action="store_true") 
group.add_argument("--import", dest="imp", help="Import source(s)", action="store_true") 
group.add_argument("--diff", help="Diff sources", action="store_true") 

parser.add_argument("filename", help="XML Filename used for exporting to, importing from or comparing while doing diff.") 

args = parser.parse_args() 

if args.export: 
    export_sources(args.filename) 
elif args.imp: 
    import_sources(args.filename) 
elif args.diff: 
    diff_sources(args.filename) 
1

당신은 getattr로도 해석 인수에 액세스 할 수 있습니다

# [...] 
if hasattr(args, 'import'): 
    import_value = getattr(args, 'import') 
관련 문제