optparse는 커맨드 라인 프로그램 실행에 이용된 option값을 parsing해주는 모듈입니다.
아래와 같은 커맨드를 가정해 보겠습니다.
python <%program> <%option> <%values>
python optparse.py -f TCPportscanner
위의 커맨드를 통해 program을 실행시킬때 option값을 통해 values를 가져오는 방식입니다.
optparse.py를 실행시킬 때 -f옵션을 통해 filename을 value로 가져오는 방식으로, 프로그램
내에서는 TCPportscanner의 파일명(경로)를 가져오게 됩니다.
아래 소스를 살펴보겠습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import optparse | |
parser = optparse.OptionParser() | |
parser.add_option("-f", "--file", dest="filename", help="File name", metavar="FILE") | |
parser.add_option('-p', dest='port', type='int', help='input port number') | |
parser.add_option('-a', dest='flag', action='store_true', help='flag tuto', default=False) | |
(options, args) = parser.parse_args() | |
if(options.filename == None): | |
print(parser.usage) | |
exit(0) | |
p = options.port | |
a = options.flag | |
f = options.filename | |
print(p) | |
print(a) | |
print(f) |
line 4: parser.add_option()을 통해 받아올 옵션값에대한 정보를 가져옵니다.
a. "-f", "--file"는 사용할 옵션의 형태를 나타냅니다. 이를 통해 프로그램을 실행할 때
<%program> -f <%values>혹은 <%program> --file <%values>형태를 사용 할 수 있습니다.
b. dest="filename"을 통해 이후 변수에 값을 가져올 때 사용 할 도착지 이름입니다.
c. help="File name"을 통해 <%program> -h 명령어를 쳤을 때 불러올 help의 내용을 입력합니다.
d. metavar="FILE"을 통해 meta type을 정의해줍니다.
line 5: parser.add_option()
a. '-p'를 통해 옵션의 형태를 취합니다.
b. dest='port'를 통해 변수에 가져올 도착지 이름을 정합니다.
c. type='int'를 통해 변수의 type을 정의해 줍니다.
d.help=''를 통해 -h명령어에 대한 description을 정의합니다.
line 6: action='store_true', default=False
위 두 옵션은 Flag값을 정의할 때 쓰입니다.
기본적으로 parser.add_options()을 5번 라인과 같은 형태를 취했을 때엔
<%program> -p <%values> 형식으로 사용되어 지지만, flag형태를 취하면
<%program> -a 만으로도 불러 올 수 있고 -a옵션이 활성화되면 Flag가 True로 변하게 됩니다.
즉 action='store_true'를 통해 옵션을 불러왔을때 default=False로 설정되어있던 값을 True로 가져오게 됩니다.
line 8: (options, args) = parser.parse_args()
parsing한 옵션 값들을 변수로 불러오기 위해 options에 집어넣어줍니다.
line 10, 11, 12: 기본적으로 option을 사용하지 않으면 값에 None가 들어있게 됩니다.
만약 필수 옵션이라면 if문을 통해 그 옵션값이 None일 때, 프로그램을 종료 시킬 수 있습니다.
line 14, 15, 16: 각각 받아온 옵션값을 변수에 저장해 줍니다.
line 18. 19. 20: 각각 받아온 옵션값을 출력합니다.
--------------------------------------------- 실행 모습------------------
# python3 optparse -f TCPportscanner
None
False
TCPportscanner
# python3 optparse -f TCPportscanner -p 22
22
False
TCPportscanner
# python3 optparse -f TCPportscanner -p 22 -a
22
True
TCPportscanner
#python3 optparse -h
Usage: optparse [options]
Options:
-h, --help show this help message and exit
-f FILE, --file=FILE File name
-p PORT input port number
-a flag tuto
--------------------------------------------- 실행 모습------------------