본문 바로가기

IT/Python

파이썬(python) getopt 함수 사용하기

/* 
written by kaspy (kaspyx@gmail.com)
*/ 

콘솔용 프로그램을 작성하다보면 같이 입력되는 명령어 인자(파라미터)들을 다루는데 많은 귀찮은 작업이 필요합니다.


여기서 인자들이란 아래와 같이


#-i : 입력 파일 이름

#-o : 출력 파일 이름

#-c : 특정 조건을 수행하라는 옵션


python example.py -i inputname -o outputname -c 


위와 같은 옵션을 처리해야하는 프로그램이라면 sys.argv[1:]의 인자를 파싱해가며 처리해줘야합니다.


이를 좀더 편하게 하기위한 getopt 함수를 사용해봅시다.

(설명이 귀찮으면 바로 예제코드 복붙해서 테스트해도 좋은방법입니다)


아래는 getopt 함수의 레퍼런스 입니다.


리턴값은 첫번째 옵션, 그리고 옵션 값으로 보면됩니다.


getopt.getopt(argsoptions[long_options]) 


args에는 입력받은 파라미터 문자열을 넣고 (일반적으로 sys.argv[1:])


두번째 options는 단일 문자 옵션, 그리고 long options는 긴문열 옵션이 입력됩니다.


아래는 체크 옵션 인자로 a,b,c,h, help 

(하나만 입력받는 옵션 인자)


입력 인자로 i, o, input,output 로 받기위한 예제 코드입니다.

(인자에 대한 추가 값을 받는 인자)


여기서 i,o 옵션은 추가 인자를 받기 때문에 ':' 문자를 (-i infile 이런식으로 입력)

input,output 또한 추가 인자를 받기 때문에 "=" 문자를 붙여줍니다. ( --input infile 이런식으로 입력)


  1. import sys
  2. import getopt
  3.  
  4. def help():
  5.   print "print help usage"
  6.   return
  7.  
  8. def main():
  9.   try:
  10.     # 여기서 입력을 인자를 받는 파라미터는 단일문자일 경우 ':' 긴문자일경우 '='을끝에 붙여주면됨
  11.     opts, args = getopt.getopt(sys.argv[1:],"abchi:o:",["input=","output=","help"])
  12.   except getopt.GetoptError as err:
  13.     print str(err)
  14.     help()
  15.     sys.exit(1)
  16.  
  17.   for opt,arg in opts:
  18.     if (opt == "-a"):
  19.       print "a option enabled"
  20.     elif ( opt == "-b"):
  21.       print "b option enabled"
  22.     elif ( opt == "-c"):
  23.       print "c option enabled"
  24.     elif ( opt == "-i" ) or ( opt == "--input"):
  25.       print "input file = "+arg
  26.     elif ( opt == "-o") or ( opt == "--output"):
  27.       print "ouput file = "+arg
  28.     elif ( opt == "-h") or ( opt == "--help"):
  29.       help()
  30.  
  31.   return
  32.  
  33. if __name__ == '__main__':
  34.   main()


아래는 위의 예제를 실행했을때 테스트한 경우에 따라 출력된 결과입니다.


잘못된 옵션('d')을 넣었을 경우



a,b 체크 옵션을 주고, i와 output 옵션을 주어 추가정보를 주었을 경우




a,b,c 체크옵션을 주고, -i와 --output을 이용해 추가 정보를 주고 h 옵션을 주었을 경우




- 참고 링크

https://docs.python.org/2/library/getopt.html