2 min read

System Information Tool

This utility gathers and displays detailed information about the system hardware and operating system. It demonstrates how to use the standard platform module for OS details and the powerful third-party psutil library for hardware utilization stats.

Modules Used:

  • platform: To retrieve operating system and processor information.
  • psutil: To retrieve CPU, memory, and disk usage statistics.

Installation

You will need to install psutil:

pip install psutil

The Code

Save this as sysinfo.py.

import platform
import psutil
from datetime import datetime

def get_size(bytes, suffix="B"):
    """
    Scale bytes to its proper format
    e.g:
        1253656 => '1.20MB'
        1253656678 => '1.17GB'
    """
    factor = 1024
    for unit in ["", "K", "M", "G", "T", "P"]:
        if bytes < factor:
            return f"{bytes:.2f}{unit}{suffix}"
        bytes /= factor

def print_system_info():
    print("="*40, "System Information", "="*40)
    uname = platform.uname()
    print(f"System: {uname.system}")
    print(f"Node Name: {uname.node}")
    print(f"Release: {uname.release}")
    print(f"Version: {uname.version}")
    print(f"Machine: {uname.machine}")
    print(f"Processor: {uname.processor}")

def print_cpu_info():
    print("="*40, "CPU Info", "="*40)
    # Number of cores
    print("Physical cores:", psutil.cpu_count(logical=False))
    print("Total cores:", psutil.cpu_count(logical=True))

    # CPU frequencies
    cpufreq = psutil.cpu_freq()
    if cpufreq:
        print(f"Max Frequency: {cpufreq.max:.2f}Mhz")
        print(f"Current Frequency: {cpufreq.current:.2f}Mhz")

    # CPU usage
    print(f"Total CPU Usage: {psutil.cpu_percent(interval=1)}%")

def print_memory_info():
    print("="*40, "Memory Information", "="*40)
    # Virtual memory
    svmem = psutil.virtual_memory()
    print(f"Total: {get_size(svmem.total)}")
    print(f"Available: {get_size(svmem.available)}")
    print(f"Used: {get_size(svmem.used)}")
    print(f"Percentage: {svmem.percent}%")

def print_disk_info():
    print("="*40, "Disk Information", "="*40)

    partitions = psutil.disk_partitions()
    for partition in partitions:
        print(f"=== Device: {partition.device} ===")
        print(f"  Mountpoint: {partition.mountpoint}")
        print(f"  File System Type: {partition.fstype}")
        try:
            partition_usage = psutil.disk_usage(partition.mountpoint)
        except PermissionError:
            # Catch errors for disks that aren't ready
            continue

        print(f"  Total Size: {get_size(partition_usage.total)}")
        print(f"  Used: {get_size(partition_usage.used)}")
        print(f"  Free: {get_size(partition_usage.free)}")
        print(f"  Percentage: {partition_usage.percent}%")

if __name__ == "__main__":
    print_system_info()
    print_cpu_info()
    print_memory_info()
    print_disk_info()

Usage

python sysinfo.py

programming/python/python