[파이썬] argparse 인수의 추적 및 로그 관리

argparse는 파이썬에서 커맨드라인 인수를 처리하기 위한 표준 라이브러리입니다. 이 라이브러리는 사용자가 스크립트에 전달하는 인수를 파싱하고 처리하는 기능을 제공합니다. 그러나 파이썬에서 긴 작업이나 대규모 프로젝트를 다룰 때, 코드에서 발생하는 로그 및 디버그 정보를 관리하는 것은 매우 중요합니다.

이 기술 블로그에서는 argparse를 사용하여 인수의 추적과 로그 관리를 어떻게 수행할 수 있는지 살펴보겠습니다.

인수 추적

인수 추적은 argparse를 사용하여 커맨드라인 인수를 처리하는 동안 어떤 인수가 전달되었는지 추적하는 것을 의미합니다. argparseargparse.ArgumentParser() 클래스를 통해 인수를 처리하는 객체를 생성합니다.

다음은 간단한 예제코드입니다.

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--name', help='이름을 입력하세요.')

    args = parser.parse_args()
    print('이름:', args.name)

if __name__ == '__main__':
    main()

위의 코드에서 argparse.ArgumentParser()로 파서 객체를 생성하고, add_argument()를 사용하여 --name 인자를 추가하였습니다. parse_args()를 호출하여 인자를 파싱하고, args.name을 통해 --name 인자의 값을 접근할 수 있습니다.

이제 다음과 같이 스크립트를 실행해보세요.

python script.py --name John

결과는 다음과 같습니다.

이름: John

이처럼 argparse를 사용하면 커맨드라인에서 전달되는 인자를 간단하게 처리할 수 있습니다.

로그 관리

로깅은 코드를 실행하는 동안 발생하는 이벤트 및 디버그 정보를 기록하는 것을 의미합니다. 파이썬에서는 logging이라는 표준 라이브러리를 제공하여 로깅 작업을 쉽게 수행할 수 있습니다.

다음은 logging 모듈을 사용하여 로그를 생성하고 기록하는 간단한 예제입니다.

import logging

def main():
    logging.basicConfig(filename='app.log', level=logging.DEBUG)
    
    logging.debug('디버그 메시지')
    logging.info('인포 메시지')
    logging.warning('경고 메시지')

if __name__ == '__main__':
    main()

basicConfig()를 사용하여 로그 파일 이름과 로그 레벨을 설정합니다. 로그 레벨은 DEBUG, INFO, WARNING, ERROR, CRITICAL 중 하나를 선택할 수 있습니다. 이후 logging.debug(), logging.info(), logging.warning()과 같은 메소드를 사용하여 로그를 기록할 수 있습니다.

위의 코드를 실행하면 app.log 파일에 로그가 기록됩니다.

DEBUG:root:디버그 메시지
INFO:root:인포 메시지
WARNING:root:경고 메시지

인수 추적과 로그 관리의 결합

파이썬에서 argparselogging을 결합하여 커맨드라인 인수를 추적하고 로그를 관리할 수 있습니다. 예를 들어, 특정 파일을 처리하는 스크립트에서 --verbose 인자를 사용하여 디버그 로그를 출력하는 기능을 추가할 수 있습니다.

import argparse
import logging

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--file', help='파일 경로를 입력하세요.')
    parser.add_argument('--verbose', action='store_true', help='디버그 로그를 출력합니다.')

    args = parser.parse_args()

    logging_level = logging.DEBUG if args.verbose else logging.INFO
    logging.basicConfig(filename='app.log', level=logging_level)
    
    logging.debug('디버그 메시지')
    logging.info('인포 메시지')
    
    if args.file:
        process_file(args.file)

def process_file(file_path):
    # 파일 처리 로직 작성
    logging.info(f'파일 처리: {file_path}')

if __name__ == '__main__':
    main()

위의 코드에서 --verbose 인자가 전달되면 디버그 로그를 출력합니다. 또한 process_file() 함수에서는 파일 처리 과정을 로그로 기록합니다.

스크립트를 다음과 같이 실행해보세요.

python script.py --file example.txt --verbose

결과는 다음과 같습니다.

INFO:root:인포 메시지
INFO:root:파일 처리: example.txt
DEBUG:root:디버그 메시지

이를 통해 argparselogging을 결합하여 커맨드라인 인수를 추적하고, 디버그 정보 및 로그를 효과적으로 관리할 수 있음을 확인할 수 있습니다.

이로써 argparse 인수의 추적과 로그 관리에 대한 간단한 소개를 마치겠습니다. argparselogging은 파이썬의 강력한 기능 중 일부입니다. 이들을 적절하게 활용하면 코드의 유지보수성을 향상시킬 수 있습니다.