python
  • argparse
  • 2016-08-17 2 views 0 likes 
    0

    파이썬에서 명령 행에서 스크립트를 수행하기 위해 Argparse를 사용하고 있습니다. 내 스크립트이있다 : 내가 전화하면 manageAdam가 작동 할과 위치 인수를 요청하지 않는 -s 것을 찾고파이썬에서 argparse를 사용하여 다른 매개 변수의 필요성을 줄이는 매개 변수를 추가하는 방법이 있습니까?

    parser = argparse.ArgumentParser(prog = 'manageAdam') 
    parser.add_argument("-s", action='store_true', default=False, help='Shows configuration file') 
    
    parser.add_argument("d", type=str, help="device") 
    parser.add_argument("o", type=str, help="operation") 
    parser.add_argument("-v", "--value", type=int, nargs='*', help="value or list to send in the operation") 
    

    , 다른없이 호출 할 수있는 -h, 같은 정의 된 위치 인수. 가능한가?

    +0

    '-h'에는 도움말을 인쇄 한 다음 시스템 종료를 수행하는 특수 조치 클래스가 있습니다. 다른 매개 변수를 차단하는 방법입니다. 특정 작업에서 파서를 끝내기위한 깨끗한 방법은 없습니다. – hpaulj

    답변

    1

    기본 제공 방법이 없습니다. 은 사용자 정의 Action 클래스를 작성하여 무언가를 달성 할 수 있어야 파서의 상태를 추적 할 수 있지만 상당히 복잡하고 버그가 발생할 것으로 생각됩니다.

    나는 최선의 방법은 UI를 향상시키는 것입니다. -s이 아니라 옵션입니다. 스크립트 실행 방식을 완전히 변경하는 별도의 명령입니다. 이 경우 하위 명령을 입력 할 수있는 subparsers 기능을 사용해야합니다. 이 인터페이스는 생각한 인터페이스와 다른 도구 (Git/mercurial 등)에서 많이 사용됩니다. 이 경우

    당신은 구성과를 처리하는 config 명령을 거라고 run (또는 당신이 그것을 호출하는 방법) 장치에서 작업을 수행 할 명령을 :

    subparsers = parser.add_subparsers(dest='command') 
    parser_config = subparsers.add_parser('config', help='Configuration') 
    parser_run = subparsers.add_parser('run', help='Execute operation on device') 
    
    parser_run.add_argument('d', type=str, ...) 
    parser_run.add_argument('o', type=str, ...) 
    parser_run.add_argument('-v', type=int, nargs='*', ...) 
    
    # later: 
    
    args = parser.parse_args() 
    if args.command == 'config': 
        print('Configuration') 
    else: 
        print('Run operation') 
    

    명령에서 사용하는

    $ manageAdam config 
    # or 
    $ manageAdam run <device> <operation> <values...> 
    
    +0

    서브 파서가보다 직관적 인 방법으로 내 스크립트를 작성한다고 생각하므로이 솔루션을 사용하고 있습니다. 하지만 다른 사람들이 그것을하는 다른 방법을 필요로한다면, nargs = '?' 옵션은 위치 인수를 필수가 아니므로 args를 분석 한 후 추가 확인을 통해 수행 할 수 있습니다. 도와 주셔서 감사합니다! – Aday88

    0

    아니요, 그런 방법은 없습니다.

    그런 다음 그들 모두가 manageAdam 다른 인수 스킵 검사를 제공하는 경우 None 그렇지 않으면 argparse.ArgumentError 제기하지 있는지 확인 수행 None에 모든 인수가 옵션으로 설정하고 기본값 만들 수 있습니다.

    관련 문제