내 PC 상태 한눈에! 파이썬으로 시스템 정보 자동 수집하기
내 PC 상태 한눈에! 파이썬으로 시스템 정보 자동 수집하기 (완성 코드 공개)
"PC가 갑자기 느려졌는데 원인을 모르겠다", "회사에서 관리하는 컴퓨터 10대의 사양과 디스크 여유 공간을 한꺼번에 파악해야 한다", "서버 메모리 사용량이 특정 시간대에 치솟는데 이력을 남기고 싶다"…
윈도우 작업 관리자를 열면 현재 상태를 볼 수 있지만 이력을 남기거나 자동으로 보고서를 만들기는 어렵습니다. 파이썬을 한 번만 세팅해두면 CPU, 메모리, 디스크, 네트워크 정보를 자동으로 수집하고 날짜·시간과 함께 엑셀에 누적 저장할 수 있습니다. 작업 스케줄러와 결합하면 정기 모니터링 시스템도 만들 수 있습니다.
1단계: 준비물 설치
파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.
시스템 정보 수집에 필요한 라이브러리를 설치합니다. 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:
pip install psutil pandas openpyxl
psutil은 CPU, 메모리, 디스크, 네트워크 등 시스템 정보를 수집하는 전용 라이브러리입니다. 윈도우·맥·리눅스 모두 지원합니다. pandas와 openpyxl은 수집한 데이터를 엑셀로 저장하는 데 사용합니다.
💡 이 코드로 수집할 수 있는 정보: CPU 사용률·코어 수·클럭 속도, 메모리 총량·사용량·여유량, 디스크 드라이브별 총량·사용량·여유량, 네트워크 송수신 바이트, 현재 실행 중인 프로세스 목록까지 수집합니다.
2단계: 완성 코드
아래 코드를 그대로 복사해서 메모장에 붙여넣고, sysinfo.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.
import psutil
import platform
import pandas as pd
from datetime import datetime
from pathlib import Path
# ① 설정
OUTPUT_PATH = r"C:\Users\내이름\Desktop\시스템정보_이력.xlsx" # ← 저장 경로
# ② 수집 시각
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# ③ CPU 정보 수집
cpu_percent = psutil.cpu_percent(interval=1) # 1초 평균 사용률
cpu_count = psutil.cpu_count(logical=True) # 논리 코어 수
cpu_freq = psutil.cpu_freq()
cpu_freq_mhz = round(cpu_freq.current, 0) if cpu_freq else 0
print(f" ✔ CPU: {cpu_percent}% 사용 / {cpu_count}코어 / {cpu_freq_mhz}MHz")
# ④ 메모리 정보 수집
mem = psutil.virtual_memory()
mem_total = round(mem.total / 1024**3, 1)
mem_used = round(mem.used / 1024**3, 1)
mem_free = round(mem.available / 1024**3, 1)
mem_pct = mem.percent
print(f" ✔ 메모리: {mem_used}GB 사용 / {mem_total}GB 전체 ({mem_pct}%)")
# ⑤ 디스크 정보 수집
disk_rows = []
for part in psutil.disk_partitions():
try:
usage = psutil.disk_usage(part.mountpoint)
disk_rows.append({
"드라이브": part.mountpoint,
"전체(GB)": round(usage.total / 1024**3, 1),
"사용(GB)": round(usage.used / 1024**3, 1),
"여유(GB)": round(usage.free / 1024**3, 1),
"사용률(%)": usage.percent,
})
print(f" ✔ 디스크 {part.mountpoint}: {usage.percent}% 사용")
except PermissionError:
pass
# ⑥ 네트워크 정보 수집
net = psutil.net_io_counters()
net_sent = round(net.bytes_sent / 1024**2, 1)
net_recv = round(net.bytes_recv / 1024**2, 1)
print(f" ✔ 네트워크: 송신 {net_sent}MB / 수신 {net_recv}MB")
# ⑦ 시스템 기본 정보
os_info = f"{platform.system()} {platform.release()}"
hostname = platform.node()
processor = platform.processor()
# ⑧ 수집 결과 정리
summary = {
"수집일시": now,
"호스트명": hostname,
"OS": os_info,
"CPU모델": processor[:50] if processor else "알 수 없음",
"CPU코어수": cpu_count,
"CPU클럭(MHz)": cpu_freq_mhz,
"CPU사용률(%)": cpu_percent,
"메모리전체(GB)": mem_total,
"메모리사용(GB)": mem_used,
"메모리여유(GB)": mem_free,
"메모리사용률(%)": mem_pct,
"네트워크송신(MB)": net_sent,
"네트워크수신(MB)": net_recv,
}
# ⑨ 엑셀에 누적 저장
output = Path(OUTPUT_PATH)
df_new = pd.DataFrame([summary])
if output.exists():
df_old = pd.read_excel(output, engine="openpyxl")
df_all = pd.concat([df_old, df_new], ignore_index=True)
else:
df_all = df_new
df_all.to_excel(output, index=False)
print(f"\n✅ 완료! 시스템 정보 저장 → {OUTPUT_PATH} (누적 {len(df_all)}회)")
3단계: 실행 방법
- 코드 ① 설정의
OUTPUT_PATH에 저장할 엑셀 파일 경로를 입력합니다. - 터미널에서 아래 명령어로 실행합니다:
python sysinfo.py
정상 실행 시 터미널에 이렇게 출력됩니다:
✔ CPU: 23.5% 사용 / 16코어 / 3600MHz ✔ 메모리: 11.2GB 사용 / 32.0GB 전체 (35.0%) ✔ 디스크 C:\: 78.4% 사용 ✔ 디스크 D:\: 42.1% 사용 ✔ 네트워크: 송신 1024.5MB / 수신 8732.1MB ✅ 완료! 시스템 정보 저장 → C:\Users\내이름\Desktop\시스템정보_이력.xlsx (누적 1회)
엑셀 파일을 열면 수집일시, 호스트명, OS, CPU·메모리·디스크·네트워크 정보가 열별로 정리됩니다. 실행할 때마다 새 행이 추가되어 이력이 자동으로 누적됩니다.
4단계: 자주 발생하는 오류와 해결법
오류 1: ModuleNotFoundError: No module named 'psutil'
설치가 제대로 되지 않은 경우입니다. 아래 명령어로 다시 시도하세요.
python -m pip install psutil pandas openpyxl
오류 2: CPU 사용률이 항상 0%로 출력됨
psutil.cpu_percent()를 처음 호출할 때는 기준값이 없어 0이 반환되는 경우가 있습니다. 코드에 interval=1이 이미 포함되어 있어 1초 동안 측정 후 반환하므로 정상 동작합니다. 그래도 0이 나온다면 interval=2로 늘려보세요.
오류 3: PermissionError for disk partition
CD-ROM, 메모리카드 슬롯 등 접근 권한이 없는 드라이브에서 발생합니다. 코드에 이미 except PermissionError: pass로 예외 처리가 포함되어 있어 해당 드라이브는 건너뛰고 계속 실행됩니다.
응용: 디스크 여유 공간이 부족하면 알림 받기
디스크 사용률이 일정 수준을 넘으면 텔레그램이나 이메일로 자동 알림을 받을 수 있습니다. 코드 ⑤ 디스크 수집 부분의 disk_rows.append() 아래에 추가하세요.
ALERT_THRESHOLD = 90 # ← 경고 기준 사용률 (%)
if usage.percent >= ALERT_THRESHOLD:
alert_msg = (f"⚠️ 디스크 경고!\n"
f"드라이브 {part.mountpoint} 사용률이 "
f"{usage.percent}%에 달했습니다.\n"
f"여유 공간: {round(usage.free/1024**3, 1)}GB")
print(f" ⚠ 경고: {alert_msg}")
# 텔레그램 알림 연동 시 아래 주석 해제
# from telegram_msg import send_message
# send_message(alert_msg)
💡 이전 게시글과 결합하면: 텔레그램 자동 발송 편과 결합하면 디스크 용량 부족, CPU 과부하 상황에서 즉시 알림을 받을 수 있습니다. 차트 자동 저장 편과 결합하면 누적된 시스템 이력을 차트로 시각화하는 것도 가능합니다.
핵심 요약
- 준비물: Python + psutil + pandas + openpyxl 설치 (pip install psutil pandas openpyxl)
- 설정: OUTPUT_PATH(저장 경로)만 수정
- 실행: 터미널에서 python sysinfo.py 입력
- 결과: CPU·메모리·디스크·네트워크 정보가 수집일시와 함께 엑셀에 누적 저장
이 코드를 응용하면 현재 실행 중인 프로세스 목록을 수집하거나, 특정 프로세스의 메모리 사용량만 추적하는 것도 가능합니다.
