89 lines
4.0 KiB
Markdown
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 모듈이 더 적합할 수 있습니다.
|