Files
python-examples/doc/27_argparse_module.md
2025-01-20 02:26:20 +09:00

89 lines
4.0 KiB
Markdown

# 실행시간 명령행 매개변수 전달받기
파이썬 프로그램을 실행할 때 다양한 옵션을 부여하여 프로그램의 동작을 조절하고 싶을 때가 있습니다. 이러한 명령줄 옵션을 처리하기 위한 가장 강력하고 편리한 방법은 argparse 모듈을 사용하는 것입니다.
## argparse
argparse 모듈은 파이썬에서 명령줄 옵션을 처리하기 위한 표준 라이브러리 모듈입니다. getopt 모듈에 비해 더욱 강력하고 사용하기 쉽다는 장점이 있으며, 복잡한 명령줄 인터페이스를 구축하는 데 효과적입니다.
* 명확한 구조: 코드가 명확하고 가독성이 좋습니다.
* 자동 도움말 생성: -h 또는 --help 옵션을 통해 사용법을 자동으로 출력합니다.
* 오류 처리: 잘못된 옵션이 입력될 경우 에러 메시지를 출력하고 프로그램을 종료합니다.
* 유효성 검사: 옵션의 타입, 범위 등을 검사하여 잘못된 입력을 방지할 수 있습니다.
```python
import argparse
# ArgumentParser 객체 생성
parser = argparse.ArgumentParser(description='This is a sample program')
# 인수 추가
parser.add_argument('-i', '--input', type=str, help='input file')
parser.add_argument('-o', '--output', type=str, help='output file')
# 인수 파싱
args = parser.parse_args()
# 파싱된 인수 사용
print(args.input)
print(args.output)
```
* ArgumentParser 객체 생성: * ArgumentParser() 함수를 호출하여 ArgumentParser 객체를 생성합니다.
* add_argument(): 옵션을 추가합니다.
* parse_args(): 명령줄 인수를 파싱하여 Namespace 객체를 반환합니다.
* Namespace: 파싱된 인수를 속성으로 가지는 객체입니다.
아래 예시에서는 -i 옵션으로 정수 리스트를 받고, --sum 옵션을 통해 합계 또는 최댓값을 계산하는 기능을 구현했습니다.
```python
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
```
## getopt
getopt 모듈은 파이썬에서 명령줄 옵션을 파싱하는 데 사용되는 표준 라이브러리 모듈입니다. 즉, 프로그램 실행 시 추가되는 옵션들을 분석하여 프로그램의 동작을 조절할 수 있도록 해줍니다. 예를 들어, 프로그램 실행 시 `-h` 옵션을 추가하여 도움말을 출력하거나, `-f` 옵션으로 특정 파일을 지정하는 등의 기능을 구현할 수 있습니다.
```python
getopt.getopt(argv, options, long_options)
```
* argv: sys.argv[1:]처럼 스크립트 이름을 제외한 인수 리스트를 전달합니다.
* options: 짧은 형식의 옵션 문자열입니다. 예를 들어, ho:v는 -h, -o, -v 옵션을 의미하며, o:는 -o 옵션에 값이 필요하다는 것을 나타냅니다.
* long_options: 긴 형식의 옵션 목록을 리스트로 전달합니다. 예를 들어, ["help", "output="]는 --help, --output 옵션을 의미합니다.
```python
import getopt
import sys
def main(argv):
opts, args = getopt.getopt(argv[1:], "ho:v", ["help", "output="])
for opt, arg in opts:
if opt in ("-h", "--help"):
print("사용법: program.py -o <outputfile> -v")
sys.exit()
elif opt in ("-o", "--output"):
output = arg
elif opt == "-v":
verbose = True
print('output:', output)
if verbose:
print('verbose mode')
if __name__ == "__main__":
main(sys.argv)
```
getopt 모듈보다 더욱 강력하고 사용하기 편리한 argparse 모듈이 있습니다. argparse 모듈은 명령줄 옵션을 더욱 직관적으로 정의하고 사용할 수 있도록 도와줍니다. 복잡한 옵션 처리에는 argparse 모듈이 더 적합할 수 있습니다.