로그 수준 및 구성 파일을 사용한 Python 인수 구문 분석

2972 단어 python
parse_known_args()를 사용하여 루트 로그 수준을 설정하고 기본 인수를 구문 분석하기 전에 구성 파일에서 기본값을 구문 분석합니다.


다음 요구 사항이 있는 Python에서 간단한 명령줄 유틸리티를 실행한다고 가정합니다.
  • 명령줄 인수로 루트 로그 수준을 설정할 수 있음
  • 외부 파일에서 구성을 선택적으로 읽음
  • 명령줄 인수가 구성 파일보다 우선합니다.
  • argparse.ArgumentParser 클래스에는 명령줄 인수를 점진적으로 구문 분석하여 후속 인수가 구문 분석되는 방법을 설정할 수 있는 parse_known_args() 메서드가 포함되어 있습니다.

    명령줄 인수에서 로그 수준 설정



    출력이 있기 전에 루트 로거를 구성해야 합니다. 인수 구문 분석이 로그 메시지를 생성할 수 있거나 생성해야 하는 작업을 수행할 예정이지만 구문 분석 중인 인수에서 로그 수준을 설정하려면 parse_known_args()를 사용하여 먼저 로그 수준을 구문 분석하고 설정합니다. 그런 다음 나머지 인수를 진행합니다.




    여담이지만 저는 일반적으로 logging config files을 사용하여 Python 애플리케이션에 대한 보다 강력한 로깅을 설정하는 것을 좋아합니다. 그러나 빠르고 간단한 명령줄 스크립트의 경우 이 접근 방식의 단순함이 마음에 듭니다.



    구성 파일에서 기본값 구문 분석



    유사한 기술을 사용하여 명령줄 인수에서 구성 파일 이름을 구문 분석한 다음 해당 구성 파일을 사용하여 구문 분석되는 나머지 인수의 기본값을 설정할 수 있습니다.



    구성 파일에 다음이 포함된다고 가정합니다.



    [options]
    option1=config value
    option2=config value
    


    이것이 작동하는 방식은 후속 명령줄 인수의 기본값이 defaults 와 함께 default 키워드 인수를 사용하는 대신 add_argument()라는 사전에 정의된다는 것입니다. 그런 다음 parse_known_args()를 사용하여 명령줄 인수에서 구성 파일 이름을 구문 분석합니다. 존재하는 경우 구성에서 값을 읽고 defaults 사전을 업데이트합니다. 그런 다음 이러한 기본값은 set_defaults() 메서드를 사용하여 나머지 명령줄 인수에 적용됩니다.




    <스크립트 id="gist-ltag"src="https://gist.github.com/MicahCarrick/e050648f4f41e47e3ea4d58f1ce5501a.js"/>


    함께 넣어



    위의 두 기술을 결합한 complete example.py source code을 참조하십시오.



    기본 로그 수준 무시:



    $ ./example.py -l DEBUG
    INFO:__main__:Log level set: DEBUG
    INFO:__main__:Option 1: default value
    INFO:__main__:Option 2: default value
    


    구성 파일에서 값 읽기:



    $ ./example.py -l DEBUG -c example.conf
    INFO:__main__:Log level set: DEBUG
    INFO:__main__:Loading configuration: example.conf
    INFO:__main__:Option 1: config value
    INFO:__main__:Option 2: config value
    


    명령줄 인수로 값 재정의:



    $ ./example.py -l DEBUG -c example.conf -1 "cli value"
    INFO:__main__:Log level set: DEBUG
    INFO:__main__:Loading configuration: example.conf
    INFO:__main__:Option 1: cli value
    INFO:__main__:Option 2: config value
    

    좋은 웹페이지 즐겨찾기