Code example

Case2.py

#!/usr/local/bin/python

import sys
import getopt

try:
      opts, args = getopt.getopt(sys.argv[1:],"i:m:" ,["inp=","mesh="])
except getopt.GetoptError as err:
      print str(err)
      sys.exit(1)

for opt,arg in opts:
      if  opt in ("-i", "--inp"):
            f_inputdeck = open(arg, "r")
      elif opt in ("-m", "--mesh"):
            f_inputmesh = open(arg, "r")


print "inputdeck file = " + f_inputdeck.name
inputdeck_lines = f_inputdeck.readlines()

print "inputmesh file = " + f_inputmesh.name
inputmesh_lines = f_inputmesh.readlines()


f_inputdeck.close()
f_inputmesh.close()

주요 코드 설명

#!/usr/local/bin/python

import sys
import getopt
  • #! 을 통해 이 스크립트를 실행시켜줄 파이썬 프로그램의 경로를 지정 (참고링크)
  • 필요한 모듈을 불러온다
    • sys 모듈은 파이썬 인터프리터와 관련된 정보와 기능을 제공하는 모듈이며, 해당 스크립트로 넘어온 입력인자(argv)를 확인하기 위해 사용
    • getopt 입력 인자를 보다 편리하기 처리하게 해주는 모듈
...

try:
      opts, args = getopt.getopt(sys.argv[1:],"i:m:" ,["inp=","mesh="])
except getopt.GetoptError as err:
      print str(err)
      sys.exit(1)
...
  • getopt.getopt() 함수를 이용해 입력 인자를 옵션과 옵션에 대한 추가 값으로 분류 해준다. 추가 옵션 값을 가지는 "-i", "-m", "--inp", "--mesh" 옵션을 받을 수 있으며, 이때 입력된 옵션 값과 추가 옵션 값은 opts에 저장된다.
    • getopt.getopt(sys.argv[1:],"i:m:" ,["inp=","mesh="])의 첫 번째 인자는 입력할 파라미터 문자열 기본적으로 실행 파일 이름을 제외한 문자열인 sys.argv[1:] 을 입력, 두 번째 인자는 입력 받을 단일 문자 옵션, 마지막 인자는 입력 받을 긴 문자 옵션이 입력된다.
    • 옵션 뒤에 추가 옵션 값이 필요한 경우 단일 문자 옵션인 경우 옵션 명 뒤에 :를 긴 문자 옵션인 경우 =를 붙여 준다.
    • ./main.py --inp input.dat --mesh mesh.dat 로 실행 시 opts에 옵션 명과 옵션 값이 저장된 튜플 형태의 배열인 [('--inp', 'input.dat'), ('--mesh', 'mesh.dat')]가 저장된다.
    • 링크 : Python documentaion getopt, 한글자료 getopt 함수 사용하기
  • 입력된 옵션 값 이외에 다른 옵션 값이 입력되는 경우 getopt.GetoptError 에러가 발생하며, 이에 대한 에러 메시지는 err에 저장된다.
    • try ... except 구문을 이용해 잘못된 옵션 값이 입력된 경우 이에 대한 에러 값을 출력하고 프로그램을 종료한다.
...
for opt,arg in opts:
      if  opt in ("-i", "--inp"):
            f_inputdeck = open(arg, "r")
...
  • opts에 저장된 옵션 명을 opt에 옵션 값을 arg에 저장하고 이를 체크하는 부분이다.
  • 입력된 옵션 명이 -i 또는 --inp이면 이때의 옵션 값을 입력 파일의 경로라 판단하여 open()함수를 통해 파일을 열고 이에 대한 정보를 f_inputdeck 이라는 파일 객체에 저장한다.
...
print "inputdeck file = " + f_inputdeck.name
inputdeck_lines = f_inputdeck.readlines()

print "inputmesh file = " + f_inputmesh.name
inputmesh_lines = f_inputmesh.readlines()


f_inputdeck.close()
f_inputmesh.close()
  • 정상적으로 입력된 파일 경로를 출력해주고 입력 파일의 모든 라인을 읽어서 각각의 줄을 요소로 갖는 리스트로 리턴한다.
  • 이후 파일을 닫고 프로그램을 종료한다.

results matching ""

    No results matching ""