프로그램이던 혹은 간단한 스크립트던, 대부분 실행시킬 때 특정한 옵션을 주게 됩니다.
물론 ls 처럼 아무 옵션 없이 실행할 수 있는 명령어도 있지만, 심지어 ls 조차도 보통 ls -al 같이 옵션을 주고 실행하는 경우가 더 많죠.
파이썬에서 옵션을 처리하는 방법은 아래 두 가지가 있습니다.
- sys 모듈의 메서드인 argv 사용
- optparse 모듈 사용
간단하게 사용할때는 sys.argv 를 사용하는게 간단하고요, 프로그램 내부에서는 인자를 주어진 순서로 구분하게 되는데 사용할 때 실수로 순서를 바꾸어 입력한다던가 하면 생각한 것과 전혀다른 결과가 나올 수 있겠죠?
하지만 인자가 하나인 경우는 굳이 optparse를 쓰지 않고 sys.argv를 사용하는 것이 여러모로 간단할 수 있습니다.
아래 예제에서는 인자로 파일을 받아서, 그 파일의 모든 라인을 lines라는 리스트로 입력하고 있습니다.
1 2 | f = open(sys.argv[1], 'r') lines = f.readlines() | cs |
간단하죠? 보통은 인자의 숫자를 체크해서 인자의 숫자가 다르면 exception이 발생하게 하는 경우도 많습니다.
인자가 여러 개인 경우, sys.argv를 쓰면 코드를 쓴 사람이 아닌 다른 사람이 쓸 때 불편함이 많으므로 (본인도, 심지어 주석에 적어 놓아도 잊어버릴 경우가 많죠 사실은) optparse모듈을 쓰는 것이 좋습니다.
아래 코드에서 처럼, 옵션을 미리 정의해 놓고 인자를 간편히 쓸 수 있습니다. sys.argv보다 소스 가독성이나 재활용성 면에서 훨씬 나은 모습을 볼 수 있습니다.
1 2 3 4 5 6 7 | parser = optparse.OptionParser(prog='Margin_calculator', version="1.0") parser.add_option('-p', '--prod_file', action='store', dest='prod_file', help='Product file') parser.add_option('-u', '--udl_file', action='store', dest='udl_file', help='Underlying file') (options, args) = parser.parse_args(sys.argv) ... products_info=product_info(options.prod_file) ... | cs |
사용법이 굉장히 직관적이기 때문에, 몇 번 사용해 보면 메모 해 놓고 다음 번에 다시 쓰기가 매우 쉽습니다.
참 쉽죠? ^^;