내부망과 외부망을 변경할 때마다 hosts 파일의 주석을 처리하거나 해제하는 작업이 반복되어 이를 자동화하기 위해 프로그램을 만들었습니다.


파이썬을 공부하면서 직접 개발해 보았고, 편리하게 사용하기 위해 이 프로그램을 exe 파일로 만들어 배포까지 간단 마무리..

 

목차
1. 파이썬 설치
2. 파이썬 코드 작성
3. 파이썬 코드 실행 파일(exe)
4. 프로그램 테스트

 


1. 파이썬 설치 후 메모장을 이용해서 VSC를 통해 파일을 만들어줌 확장자는 .py로 작성한다.
2. Python 코드를 실행파일로 변환하기 위해 'pyinstaller' 도구 사용
하단 명령어를 이용해서 생성

 pip install pyinstaller


 - py파일을 만든 해당 경로로 들어가서 bash 실행
 - pyinstaller --onefile 이름을 적으면 됨.py
3. dist 폴더가 생기고 .exe파일을 실행한다.

 + pyinstaller 제대로 설치되지 않은 경우?
 파이썬 pip버전이 올바르게 설치되어있는지 확인하고

python --version
pip --version


pip버전이 오래됐을 경우 업데이트가 필요함

python -m pip install --upgrade pip


그리고 다시 pip install pyinstaller 명령어를 사용하면 됨


import tkinter as tk
from tkinter import messagebox
import os

# hosts 파일 경로
HOSTS_FILE_PATH = r'C:\Windows\System32\drivers\etc\hosts'  # Windows의 경우

def update_hosts_file(line_numbers):
    try:
        # hosts 파일을 UTF-8 인코딩으로 읽기
        with open(HOSTS_FILE_PATH, 'r', encoding='utf-8') as file:
            lines = file.readlines()
        
        for line_num in line_numbers:
            index = line_num - 1
            if lines[index].strip().startswith("#"):
                lines[index] = lines[index].replace("#", "", 1).lstrip()
        
        # hosts 파일을 UTF-8 인코딩으로 쓰기
        with open(HOSTS_FILE_PATH, 'w', encoding='utf-8') as file:
            file.writelines(lines)
        
        messagebox.showinfo("Success", "Selected lines updated successfully.")
    except Exception as e:
        messagebox.showerror("Error", f"An error occurred: {e}")

def run_task_A():
    update_hosts_file([67, 68])

def run_task_B():
    update_hosts_file([69])

# GUI 생성
def create_gui():
    root = tk.Tk()
    root.title("Hosts File Modifier")

    tk.Label(root, text="Choose an action:").pack(pady=10)

    tk.Button(root, text="Run Task A (Lines 67, 68)", command=run_task_A).pack(pady=5)
    tk.Button(root, text="Run Task B (Line 69)", command=run_task_B).pack(pady=5)

    root.mainloop()

if __name__ == "__main__":
    create_gui()

하나하나 해석 
1. tkinter를 사용하여 간단한 GUI를 만들어서 수정 가능하게 해줌
2. tkinter에서 messagebox를 가져와서 박스를 표시하게 해줌
import os 운영체제 파일 경로 환결설정 가능

3. 호스트 파일 경로 정의
HOSTS_FILE_PATH = r'C:\Windows\System32\drivers\etc\hosts'
r'... : 원시 문자열이고 이스케이프 시퀀스를 무시함 , '\' 문자를 있는 그대로 사용하게 해줌

4. update_hosts_file 함수 
update_hosts_file(line_numbers) < 자바 처럼 인자 값 받는 것

5. with open에서 'r'은 읽기 모드로 연다는 것 , UTF-8 형식으로 읽고 line_nmubers 리스트로 하나하나 처리
6. strip() 함수로 공백을 제거한 후 주석 '#'으로 시작하는지 확인 후 제거함
7. writelines로 수정된 lines를 리스트에 작성
8. 내가 마우스로 클릭했을 때 일어나는 함수 line 정의 파라미터로 보내는 값
9. create_gui를 이용해서 그래픽 사용자 인터페이스를 만들어서 버튼을 눌러 작업 가능하게 해줌
10. root = tk.Tk() 메인 윈도우 창을 만드는 객체
11. root.title 창의 제목 설정 가능
12. pady는 레이블 위아래로 여백을 줌 , Label창에 텍스트 추가
13. 해당 버튼을 클릭하면 함수가 실행되게함 , root에 있는 command가 실행되게
14. root.mainloop()는 프로그램이 종료될 때 까지 GUI를 실행하고 유지시켜줌
15. if __name__ == "__main__": 구문은 파이썬에서 자주 사용 됨. 다른 스크립트에 호출된 것이 아니라 직접 실행되었을때만 내부의 코드를 실행하게 해주는 것

 

 

+ Recent posts