20090404 :: 파이썬에서 환경 파일 다루기

얼마전 서브 블로그를 통해서 포스팅한 ‘netsh’를 사용해서 유선랜 설정 바꾸는 스크립트를 만들어서 잘 활용하고 있습니다. 요즘은 집 – 사이트를 왔다 갔다 하고 있어서 하루에 두 번씩은 랜 연결의 ip 설정을 바꿔주게 되는데요, 두 개의 배치 파일을 만들고 입력값에 따라 각각 배치 파일을 실행해주는 파이썬 스크립트를 사용중입니다. 그런데 참 욕심이라는게, 다른 설정을 필요로 하는 경우에도 손쉽게 이를 추가하면 좋겠다는 생각이 들더군요. 그래서 그 스크립트를 업그레이드 하기로 결심했습니다. 외부 설정 파일을 사용하여 여러 군데의 유선 랜 설정 정보를 저장해 두고, 프로그램 실행 시 연결을 선택하여 설정을 바꿀 수 있는 프로그램으로 말이지요. 실제 작동 자체는 딱 2개 라인이면 되겠지만, 설정 파일을 이용하는 것 자체가 해 본 적이 없어서 그런지 만만하지가 않을 듯 합니다.

1. ini 파일을 사용하기

첫번 째로 ini 파일을 사용하는 방법이 있습니다. 사실 많은 분들이 사용하는 방법 중에 하나 입니다. 단순히 메모장으로 설정 파일 편집이 가능하고 간단하게 주석처리하여 설정을 바꿀 수 있는 장점이 존재하지요. 다만 특정한 한 가지씩의 속성 값만을 외부 파일에 정의할 때 간편하고 빠른 방법임에는 분명합니다만, 기본적으로 텍스트 파일에 정보를 담아두는 경우에는 라인 별로 처리하게 되므로 동일한 유형의 여러 가지 데이터를 미리 담아두기에는 다소 어려움이 많습니다. (구분자를 적절히 이용할 수 있겠습니다만, 그러면 사람이 수동으로 설정을 편집하기가 쉽지 않을 수 있지요)

2. py 파일을 반입하기

설정을 하나의 사전 혹은 사전의 리스트 형태로 만들어서 저장하고 변경하는 방법입니다. 실제로 많은 파이썬 프로그램이 채용하고 있는 방식이기도 합니다. 대표적으로 django의 settings.py 파일이 이러한 예에 속하지요. 설정 로딩 자체를 import를 통해서 해버리면 그만입니다. 별도의 파싱이 필요없다는 최고의 장점을 지니고 있지요. 다만, 설정 파일을 수정하면서 오타를 낸다면 프로그램 자체가 설정 파일을 무시하지 못하고 실행이 안되는 문제가 있기는 합니다. 게다가 py2exe 등을 써서 실행 파일로 배포하는 경우, 아마 반입되는 파일들이 함께 컴파일 되는 것으로 알고 있어서 사용할 수 없는 것으로 알고 있습니다.

3.xml  파일을 사용하기

세번 째로 xml 파일을 사용하는 방법을 생각할 수 있습니다. xml 파일로 설정 파일을 대체하는 경우라면, py2exe 등의 툴로 실행 파일을 배포해도 무관하게 쓸 수 있다는 장점이 있고, 설정 편집 기능을 프로그램 자체에서 제공할 수도 있습니다. 게다가 파싱도 minidom과 같은 파서를 사용하면 그만인 부분이 있지요. 물론 형식에 맞지 않는 xml 파일은 오류를 일으킬 수 있지만, 이는 충분히 방어 가능한 수준일 것으로 생각됩니다. 다만, 이러한 파서를 쓰게 되면 실행 파일로 만들어 배포할 때는 용량이 다소 커지지 않을까 생각은 드는 군요. 

대략 이런 세 가지 방법이 생각 납니다. 혹 다른 좋은 아이디어나 방법이 있다면 댓글로 알려주시면 감사하겠습니다. 그리고 혹 저와 같은 필요성을 가지는 분들이 계시다면, 나중에 해당 프로그램을 만들어서 성공하면, 부끄럽지만 살짝 공개해 볼까도 합니다.

  • 안녕하세요, sooop님. 🙂

    작년 만우절 때 제 글에 속으셨던 것 기억하시나요? 🙂 그때 속으셨던 내용(Django 책)과 관련해서 전해드릴 소식이 있어 댓글을 달아봅니다. (방명록 같은 곳을 찾아보았으나 없어서 부득이 이 글에 댓글로 답니다. 내용이 맞지 않으면 지우셔도 괜찮습니다. :))

    스파이크님께서 Django 번역서를 내셨거든요. 🙂 이미 잘 다루실 것 같지만, 혹시나 필요하실 것 같아서 광고처럼 보이는 소개글을 살짝 남겨봅니다. 🙂

    • 반갑습니다 한날님! ㅋ 안그래도 6개월이나 지나서 낚인 제 자신이 어찌나 부끄럽든지… 안그래도 한날님 블로그를 열심히 구독하고 있어서 소식은 알고 있습니다. 이번에 구매 도서 목록에 이미 올려두었지요 🙂 날씨가 갑자기 더워졌는데, 항상 건강하세요~ 댓글 고맙습니다!