본문 바로가기
개발 이야기/Python

Python Script 작성시 argument 여러개 받기

by 농개 2019. 7. 16.

회사 업무 효율을 위해서 이런저런 스크립트를 짜곤합니다. 그중 파이썬을 애용하는데요.

작성하기 편하고, 모듈도 잘 만들어 져있어서 잘만 쓰면 너무 좋은 언어인듯합니다.

 

파이썬으로 스크립트 작성 시 argument에 대한 처리 할 때 아래와 같이 하곤 합니다.

 

# Python 3.7
# file : script.py
# author : blabla

import sys


if __name__ == '__main__':
    argument = sys.argv
    del argument[0]			# 첫번째 인자는 script.py 즉 실행시킨 파일명이 되기 때문에 지운다
    print('Argument : {}'.format(argument))

 

위 스크립트를 실행 해보면 아래와 같은 실행결과를 얻을 수 있습니다.

PS C:\mynode\auto-script> python script.py index.txt index.html
Argument : ['index.txt', 'index.html']

간단한 스크립트 짜기에는 문제 없지만...

스크립트에 옵션 같은 걸 줄 땐(ex. --optional 등등) sys.argv로 인자를 얻어오기에는 까다로울 수 있습니다.

 

파이썬에는 인자값. 즉, argument에 대한 처리를 도와주는 모듈이 있습니다.(내장모듈)

 

바로 argparse 라는 놈입니다.

 

argparse를 이용해서

  1. 여러개의 argument를 처리
  2. 옵션 추가하여 처리

기능을 하는 파이선 스크립트를 작성 해보도록 하겠습니다.

 

# Python 3.7
# file : script.py
# author : blabla

import argpars   	# 내장모듈


def main(filename_list, option_list):
	"""
    메인 함수
    """
    print('Target File : {}'.format(filename_list))
    print('Optional : {}'.format(option_list))


def get_arguments():
	"""
    argument를 파싱해서 가져옴
    """
    parser = argparse.ArgumentParser()
    parser.add_argument(nargs='+' ,help='Example) index.html', dest='filename')
    parser.add_argument('--optional', '-o', nargs='*', help='Example) save', default=[], dest='option')

    filename_list = parser.parse_args().filename
    option_list = parser.parse_args().option

    return filename_list, option_list


if __name__ == '__main__':
    filename_list, option_list = get_arguments()
    main(filename_list, option_list)

 

상단의 sys.argv를 이용한 코드와 차별되게 main함수와 argument를 얻어오는 함수로 나누어 작성해봤습니다.

주요 코드를 보면...

  • parser.add_argument(nargs='+' ,help='Example) index.html', default=['index.html'], dest='filename')
  • parser.add_argument('--optional', '-o', nargs='*', help='Example) save', default=[], dest='option')
nargs : 인자를 여러개 받음(+는 1~n개, *는 0~n개를 뜻합니다)
help : ArgumentParser()로 파서를 만들면 기본적으로 --help(또는 -h)를 사용할 수 있습니다.(ex. python script.py --help) 도움말을 설정해줍니다.
dest : 인자의 이름을 설정합니다.
default : 디뽈뜨

 

그리고 실행 시켜보면 아래와 같은 실행화면을 확인 할 수 있습니다.

PS C:\mynode\auto-script> python script.py index.txt index.html --optional "this is string" "this is also number"
Target File : ['index.txt', 'index.html']
Optional : ['this is string', 'this is also number']

 

optional 부분에 굳이 따옴표를 사용하지 않아도 됩니다.(위의 경우는 띄어씌기 때문에...)

PS C:\mynode\auto-script> python script.py index.txt index.html --optional save
Target File : ['index.txt', 'index.html']
Optional : ['save']

 

--help 를 해보면 아래와 같이 도움말이 출력됩니다.

PS C:\mynode\auto-script> python script.py --help
usage: script.py [-h] [--optional [OPTION [OPTION ...]]]
                 filename [filename ...]

positional arguments:
  filename              Example) index.html

optional arguments:
  -h, --help            show this help message and exit
  --optional [OPTION [OPTION ...]], -o [OPTION [OPTION ...]]
                        Example) save