티스토리 뷰

python

Python argparse 명령행 인자 받기

on1ystar 2019. 3. 17. 00:19
728x90
반응형

이 내용은 https://docs.python.org/ko/3.7/library/argparse.html#description 을 참고하였습니다.


argparse는 파이썬에서 제공되는 표준 라이브러리로 명령행을 구분해주는 편한 모듈이다.

이 모듈을 사용하면 커맨드 라인의 문자열들을 일일히 파싱해서 구분하지 않아도 되고, 다양한 함수들을 이용해 편하게 커맨드 라인 옵션을 입력할 수 있다.


아래의 코드는 간단한 소켓 프로그램을 코딩할 때 사용했던 커맨드 라인 입력을 받는 부분이다.

client.py 일부

import argparse

if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Echo client -p port -i host -s string")
parser.add_argument('-p', help="port_number", required=True)
parser.add_argument('-i', help="host_name", required=True)
parser.add_argument('-s', help="input_string", nargs='+', required=True)

args = parser.parse_args()
run(host=args.i, port=int(args.p), strList=args.s)

-p 옵션: 포트번호

-i 옵션: 서버 ip주소

-s 옵션: 입력할 문자열



if __name__ == '__main__'

파이썬은 인터프리터 언어이기 때문에 따로 메인함수가 없다. 대신에 들여쓰기를 하지 않은 코드들을 순차적으로 실행한다. (함수나 클래스의 정의 부분은 제외)

__name__ 은 현재 모듈(작성중인 파일)의 이름을 담고 있는 내장 함수로 이 모듈이 직접 실행되는 경우(> python client.py)에만 __name__이 __main__으로 설정된다.

즉, 이 코드는 커맨드 라인에서 인자 값을 주기 위해 .py 파일을 직접 실행해야 하는 경우에 필요하다.


parser = argparse.ArgumentParser(description="Echo client -p port -i host -s string")

argparse.ArgumentParser(description="")로 parser 객체를 생성한다.

description은 인자 도움말 전에 표시할 텍스트다. 이 인자는 프로그램의 기능과 작동 방식에 대한 간략한 설명을 제공한다.


parser.add_argument('-p', help="port_number", required=True)

add_argument는 단일 명령행 인자를 구문 분석하는 방법을 정의한다. 앞에 나오는 '-p'는 명령행 옵션 문자열의 이름이다. 위의 사용한 옵션들은

help : 인자가 하는 일에 대한 간단한 설명

required : 명령행 옵션을 생략할 수 있는지의 여부 (True면 생략 x)

nargs : 소비되어야 하는 명령행 인자 수 ('+'를 주면 모든 명령행 인자를 리스트로 모은다. 또한 적어도 하나의 명령행 인자가 제공되지 않으면 에러 메세지를 띄운다.)

그 밖에 알면 좋은 옵션으로

type : 명령행 인자가 반환되어야 할 타입

default : 인자가 명령행에 없는 경우 생성되는 값


args = parser.parse_args()

parse_args(args=Nonenamespace=None)로 인자 문자열을 객체로 변환하고 namespace의 attribute로 설정한다.

위의 경우 각각 옵션 p, i, s의 이름으로 객체에 담긴다.


run(host=args.i, port=int(args.p), strList=args.s)

위의 코드 상에서는 없지만 run이라는 함수를 정의했는데, 그 run함수의 인자 값으로 객체로 변환된 명령행 인자 값들을 전달하는 코드다.

728x90
반응형

'python' 카테고리의 다른 글

Python 파일 처리  (0) 2019.03.23
Python 소켓 모듈 사용  (0) 2019.03.17
Python List tip, lambda  (0) 2019.03.13
Python mutable vs immutable  (0) 2019.03.12
Python Quicksort  (0) 2019.03.08
댓글