Introduction
Hey there, fellow coders! Today, I’m super excited to share an awesome project I recently worked on—a Python System Monitor. This isn’t just any ordinary system monitor; it comes with a splash of color and a whole lot of flair! Whether you’re a beginner looking to level up your Python skills or an experienced developer wanting to create a handy tool, this project has something for everyone. Plus, I’ve made it open-source, so feel free to check out the code on my GitHub repository.
I’m new to the development world, and every star on the repo will really motivate me to keep learning and building cool projects!
What Does It Do?
This Python System Monitor provides detailed information about your system’s hardware, including:
- System Information: OS, Node Name, Release, Version, Machine, and Processor.
- CPU Information: Physical and Logical Cores, Frequency, and Usage.
- Memory Information: Total, Available, Used Memory, and Swap.
- GPU Information: Load, Free Memory, Used Memory, Total Memory, and Temperature.
Key Libraries Used
- os and platform: For basic system information.
- psutil: To fetch CPU and memory details.
- GPUtil: To get GPU stats.
- colorama: To add some colorful flair to the terminal output.
- tabulate: To format the output into neat tables.
Breaking Down the Code
Let’s dive into the code and see how it all works.
1. System Information
We start by fetching basic system details using the platform
library. The get_system_info
function gathers and formats these details into a table.
<span>import</span> <span>platform</span><span>from</span> <span>colorama</span> <span>import</span> <span>Fore</span><span>,</span> <span>Style</span><span>def</span> <span>get_system_info</span><span>():</span><span>uname</span> <span>=</span> <span>platform</span><span>.</span><span>uname</span><span>()</span><span>system_info</span> <span>=</span> <span>[</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>System</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>system</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>Node Name</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>node</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>Release</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>release</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>Version</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>version</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>Machine</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>machine</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>Processor</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>processor</span><span>]</span><span>]</span><span>return</span> <span>system_info</span><span>import</span> <span>platform</span> <span>from</span> <span>colorama</span> <span>import</span> <span>Fore</span><span>,</span> <span>Style</span> <span>def</span> <span>get_system_info</span><span>():</span> <span>uname</span> <span>=</span> <span>platform</span><span>.</span><span>uname</span><span>()</span> <span>system_info</span> <span>=</span> <span>[</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>System</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>system</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>Node Name</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>node</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>Release</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>release</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>Version</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>version</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>Machine</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>machine</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}</span><span>Processor</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>uname</span><span>.</span><span>processor</span><span>]</span> <span>]</span> <span>return</span> <span>system_info</span>import platform from colorama import Fore, Style def get_system_info(): uname = platform.uname() system_info = [ [f"{Fore.YELLOW}System{Style.RESET_ALL}", uname.system], [f"{Fore.YELLOW}Node Name{Style.RESET_ALL}", uname.node], [f"{Fore.YELLOW}Release{Style.RESET_ALL}", uname.release], [f"{Fore.YELLOW}Version{Style.RESET_ALL}", uname.version], [f"{Fore.YELLOW}Machine{Style.RESET_ALL}", uname.machine], [f"{Fore.YELLOW}Processor{Style.RESET_ALL}", uname.processor] ] return system_info
Enter fullscreen mode Exit fullscreen mode
2. CPU Information
Next, we use psutil
to get detailed CPU information, including core counts and frequencies.
<span>import</span> <span>psutil</span><span>from</span> <span>colorama</span> <span>import</span> <span>Fore</span><span>,</span> <span>Style</span><span>def</span> <span>get_cpu_info</span><span>():</span><span>cpufreq</span> <span>=</span> <span>psutil</span><span>.</span><span>cpu_freq</span><span>()</span><span>cpu_info</span> <span>=</span> <span>[</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Physical cores</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>psutil</span><span>.</span><span>cpu_count</span><span>(</span><span>logical</span><span>=</span><span>False</span><span>)],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Total cores</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>psutil</span><span>.</span><span>cpu_count</span><span>(</span><span>logical</span><span>=</span><span>True</span><span>)],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Max Frequency</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>cpufreq</span><span>.</span><span>max</span><span>:</span><span>.</span><span>2</span><span>f</span><span>}</span><span>Mhz</span><span>"</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Min Frequency</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>cpufreq</span><span>.</span><span>min</span><span>:</span><span>.</span><span>2</span><span>f</span><span>}</span><span>Mhz</span><span>"</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Current Frequency</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>cpufreq</span><span>.</span><span>current</span><span>:</span><span>.</span><span>2</span><span>f</span><span>}</span><span>Mhz</span><span>"</span><span>]</span><span>]</span><span>for</span> <span>i</span><span>,</span> <span>percentage</span> <span>in</span> <span>enumerate</span><span>(</span><span>psutil</span><span>.</span><span>cpu_percent</span><span>(</span><span>percpu</span><span>=</span><span>True</span><span>,</span> <span>interval</span><span>=</span><span>1</span><span>)):</span><span>cpu_info</span><span>.</span><span>append</span><span>([</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Core </span><span>{</span><span>i</span><span>}{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>percentage</span><span>}</span><span>%</span><span>"</span><span>])</span><span>cpu_info</span><span>.</span><span>append</span><span>([</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Total CPU Usage</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>psutil</span><span>.</span><span>cpu_percent</span><span>()</span><span>}</span><span>%</span><span>"</span><span>])</span><span>return</span> <span>cpu_info</span><span>import</span> <span>psutil</span> <span>from</span> <span>colorama</span> <span>import</span> <span>Fore</span><span>,</span> <span>Style</span> <span>def</span> <span>get_cpu_info</span><span>():</span> <span>cpufreq</span> <span>=</span> <span>psutil</span><span>.</span><span>cpu_freq</span><span>()</span> <span>cpu_info</span> <span>=</span> <span>[</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Physical cores</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>psutil</span><span>.</span><span>cpu_count</span><span>(</span><span>logical</span><span>=</span><span>False</span><span>)],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Total cores</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>psutil</span><span>.</span><span>cpu_count</span><span>(</span><span>logical</span><span>=</span><span>True</span><span>)],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Max Frequency</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>cpufreq</span><span>.</span><span>max</span><span>:</span><span>.</span><span>2</span><span>f</span><span>}</span><span>Mhz</span><span>"</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Min Frequency</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>cpufreq</span><span>.</span><span>min</span><span>:</span><span>.</span><span>2</span><span>f</span><span>}</span><span>Mhz</span><span>"</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Current Frequency</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>cpufreq</span><span>.</span><span>current</span><span>:</span><span>.</span><span>2</span><span>f</span><span>}</span><span>Mhz</span><span>"</span><span>]</span> <span>]</span> <span>for</span> <span>i</span><span>,</span> <span>percentage</span> <span>in</span> <span>enumerate</span><span>(</span><span>psutil</span><span>.</span><span>cpu_percent</span><span>(</span><span>percpu</span><span>=</span><span>True</span><span>,</span> <span>interval</span><span>=</span><span>1</span><span>)):</span> <span>cpu_info</span><span>.</span><span>append</span><span>([</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Core </span><span>{</span><span>i</span><span>}{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>percentage</span><span>}</span><span>%</span><span>"</span><span>])</span> <span>cpu_info</span><span>.</span><span>append</span><span>([</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}</span><span>Total CPU Usage</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>psutil</span><span>.</span><span>cpu_percent</span><span>()</span><span>}</span><span>%</span><span>"</span><span>])</span> <span>return</span> <span>cpu_info</span>import psutil from colorama import Fore, Style def get_cpu_info(): cpufreq = psutil.cpu_freq() cpu_info = [ [f"{Fore.CYAN}Physical cores{Style.RESET_ALL}", psutil.cpu_count(logical=False)], [f"{Fore.CYAN}Total cores{Style.RESET_ALL}", psutil.cpu_count(logical=True)], [f"{Fore.CYAN}Max Frequency{Style.RESET_ALL}", f"{cpufreq.max:.2f}Mhz"], [f"{Fore.CYAN}Min Frequency{Style.RESET_ALL}", f"{cpufreq.min:.2f}Mhz"], [f"{Fore.CYAN}Current Frequency{Style.RESET_ALL}", f"{cpufreq.current:.2f}Mhz"] ] for i, percentage in enumerate(psutil.cpu_percent(percpu=True, interval=1)): cpu_info.append([f"{Fore.CYAN}Core {i}{Style.RESET_ALL}", f"{percentage}%"]) cpu_info.append([f"{Fore.CYAN}Total CPU Usage{Style.RESET_ALL}", f"{psutil.cpu_percent()}%"]) return cpu_info
Enter fullscreen mode Exit fullscreen mode
3. Memory Information
Memory details, including swap memory, are fetched and formatted.
<span>from</span> <span>colorama</span> <span>import</span> <span>Fore</span><span>,</span> <span>Style</span><span>def</span> <span>get_memory_info</span><span>():</span><span>svmem</span> <span>=</span> <span>psutil</span><span>.</span><span>virtual_memory</span><span>()</span><span>swap</span> <span>=</span> <span>psutil</span><span>.</span><span>swap_memory</span><span>()</span><span>memory_info</span> <span>=</span> <span>[</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Total Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>svmem</span><span>.</span><span>total</span><span>)</span><span>}</span><span>"</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Available Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>svmem</span><span>.</span><span>available</span><span>)</span><span>}</span><span>"</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Used Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>svmem</span><span>.</span><span>used</span><span>)</span><span>}</span><span>"</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Percentage</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>svmem</span><span>.</span><span>percent</span><span>}</span><span>%</span><span>"</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Total Swap</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>swap</span><span>.</span><span>total</span><span>)</span><span>}</span><span>"</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Free Swap</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>swap</span><span>.</span><span>free</span><span>)</span><span>}</span><span>"</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Used Swap</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>swap</span><span>.</span><span>used</span><span>)</span><span>}</span><span>"</span><span>],</span><span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Percentage Swap</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>swap</span><span>.</span><span>percent</span><span>}</span><span>%</span><span>"</span><span>]</span><span>]</span><span>return</span> <span>memory_info</span><span>def</span> <span>get_size</span><span>(</span><span>bytes</span><span>,</span> <span>suffix</span><span>=</span><span>"</span><span>B</span><span>"</span><span>):</span><span>factor</span> <span>=</span> <span>1024</span><span>for</span> <span>unit</span> <span>in</span> <span>[</span><span>""</span><span>,</span> <span>"</span><span>K</span><span>"</span><span>,</span> <span>"</span><span>M</span><span>"</span><span>,</span> <span>"</span><span>G</span><span>"</span><span>,</span> <span>"</span><span>T</span><span>"</span><span>,</span> <span>"</span><span>P</span><span>"</span><span>]:</span><span>if</span> <span>bytes</span> <span><</span> <span>factor</span><span>:</span><span>return</span> <span>f</span><span>"</span><span>{</span><span>bytes</span><span>:</span><span>.</span><span>2</span><span>f</span><span>}{</span><span>unit</span><span>}{</span><span>suffix</span><span>}</span><span>"</span><span>bytes</span> <span>/=</span> <span>factor</span><span>from</span> <span>colorama</span> <span>import</span> <span>Fore</span><span>,</span> <span>Style</span> <span>def</span> <span>get_memory_info</span><span>():</span> <span>svmem</span> <span>=</span> <span>psutil</span><span>.</span><span>virtual_memory</span><span>()</span> <span>swap</span> <span>=</span> <span>psutil</span><span>.</span><span>swap_memory</span><span>()</span> <span>memory_info</span> <span>=</span> <span>[</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Total Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>svmem</span><span>.</span><span>total</span><span>)</span><span>}</span><span>"</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Available Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>svmem</span><span>.</span><span>available</span><span>)</span><span>}</span><span>"</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Used Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>svmem</span><span>.</span><span>used</span><span>)</span><span>}</span><span>"</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Percentage</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>svmem</span><span>.</span><span>percent</span><span>}</span><span>%</span><span>"</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Total Swap</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>swap</span><span>.</span><span>total</span><span>)</span><span>}</span><span>"</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Free Swap</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>swap</span><span>.</span><span>free</span><span>)</span><span>}</span><span>"</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Used Swap</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>get_size</span><span>(</span><span>swap</span><span>.</span><span>used</span><span>)</span><span>}</span><span>"</span><span>],</span> <span>[</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}</span><span>Percentage Swap</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>swap</span><span>.</span><span>percent</span><span>}</span><span>%</span><span>"</span><span>]</span> <span>]</span> <span>return</span> <span>memory_info</span> <span>def</span> <span>get_size</span><span>(</span><span>bytes</span><span>,</span> <span>suffix</span><span>=</span><span>"</span><span>B</span><span>"</span><span>):</span> <span>factor</span> <span>=</span> <span>1024</span> <span>for</span> <span>unit</span> <span>in</span> <span>[</span><span>""</span><span>,</span> <span>"</span><span>K</span><span>"</span><span>,</span> <span>"</span><span>M</span><span>"</span><span>,</span> <span>"</span><span>G</span><span>"</span><span>,</span> <span>"</span><span>T</span><span>"</span><span>,</span> <span>"</span><span>P</span><span>"</span><span>]:</span> <span>if</span> <span>bytes</span> <span><</span> <span>factor</span><span>:</span> <span>return</span> <span>f</span><span>"</span><span>{</span><span>bytes</span><span>:</span><span>.</span><span>2</span><span>f</span><span>}{</span><span>unit</span><span>}{</span><span>suffix</span><span>}</span><span>"</span> <span>bytes</span> <span>/=</span> <span>factor</span>from colorama import Fore, Style def get_memory_info(): svmem = psutil.virtual_memory() swap = psutil.swap_memory() memory_info = [ [f"{Fore.GREEN}Total Memory{Style.RESET_ALL}", f"{get_size(svmem.total)}"], [f"{Fore.GREEN}Available Memory{Style.RESET_ALL}", f"{get_size(svmem.available)}"], [f"{Fore.GREEN}Used Memory{Style.RESET_ALL}", f"{get_size(svmem.used)}"], [f"{Fore.GREEN}Percentage{Style.RESET_ALL}", f"{svmem.percent}%"], [f"{Fore.GREEN}Total Swap{Style.RESET_ALL}", f"{get_size(swap.total)}"], [f"{Fore.GREEN}Free Swap{Style.RESET_ALL}", f"{get_size(swap.free)}"], [f"{Fore.GREEN}Used Swap{Style.RESET_ALL}", f"{get_size(swap.used)}"], [f"{Fore.GREEN}Percentage Swap{Style.RESET_ALL}", f"{swap.percent}%"] ] return memory_info def get_size(bytes, suffix="B"): factor = 1024 for unit in ["", "K", "M", "G", "T", "P"]: if bytes < factor: return f"{bytes:.2f}{unit}{suffix}" bytes /= factor
Enter fullscreen mode Exit fullscreen mode
4. GPU Information
Using GPUtil
, we gather GPU details and display them in a readable format.
<span>import</span> <span>GPUtil</span><span>from</span> <span>colorama</span> <span>import</span> <span>Fore</span><span>,</span> <span>Style</span><span>def</span> <span>get_gpu_info</span><span>():</span><span>gpus</span> <span>=</span> <span>GPUtil</span><span>.</span><span>getGPUs</span><span>()</span><span>gpu_info</span> <span>=</span> <span>[]</span><span>for</span> <span>gpu</span> <span>in</span> <span>gpus</span><span>:</span><span>gpu_info</span><span>.</span><span>append</span><span>([</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU ID</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>gpu</span><span>.</span><span>id</span><span>])</span><span>gpu_info</span><span>.</span><span>append</span><span>([</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Name</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>gpu</span><span>.</span><span>name</span><span>])</span><span>gpu_info</span><span>.</span><span>append</span><span>([</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Load</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>gpu</span><span>.</span><span>load</span> <span>*</span> <span>100</span><span>}</span><span>%</span><span>"</span><span>])</span><span>gpu_info</span><span>.</span><span>append</span><span>([</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Free Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>gpu</span><span>.</span><span>memoryFree</span><span>}</span><span>MB</span><span>"</span><span>])</span><span>gpu_info</span><span>.</span><span>append</span><span>([</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Used Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>gpu</span><span>.</span><span>memoryUsed</span><span>}</span><span>MB</span><span>"</span><span>])</span><span>gpu_info</span><span>.</span><span>append</span><span>([</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Total Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>gpu</span><span>.</span><span>memoryTotal</span><span>}</span><span>MB</span><span>"</span><span>])</span><span>gpu_info</span><span>.</span><span>append</span><span>([</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Temperature</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>gpu</span><span>.</span><span>temperature</span><span>}</span><span> °C</span><span>"</span><span>])</span><span>return</span> <span>gpu_info</span><span>import</span> <span>GPUtil</span> <span>from</span> <span>colorama</span> <span>import</span> <span>Fore</span><span>,</span> <span>Style</span> <span>def</span> <span>get_gpu_info</span><span>():</span> <span>gpus</span> <span>=</span> <span>GPUtil</span><span>.</span><span>getGPUs</span><span>()</span> <span>gpu_info</span> <span>=</span> <span>[]</span> <span>for</span> <span>gpu</span> <span>in</span> <span>gpus</span><span>:</span> <span>gpu_info</span><span>.</span><span>append</span><span>([</span> <span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU ID</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>gpu</span><span>.</span><span>id</span> <span>])</span> <span>gpu_info</span><span>.</span><span>append</span><span>([</span> <span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Name</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>gpu</span><span>.</span><span>name</span> <span>])</span> <span>gpu_info</span><span>.</span><span>append</span><span>([</span> <span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Load</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>gpu</span><span>.</span><span>load</span> <span>*</span> <span>100</span><span>}</span><span>%</span><span>"</span> <span>])</span> <span>gpu_info</span><span>.</span><span>append</span><span>([</span> <span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Free Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>gpu</span><span>.</span><span>memoryFree</span><span>}</span><span>MB</span><span>"</span> <span>])</span> <span>gpu_info</span><span>.</span><span>append</span><span>([</span> <span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Used Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>gpu</span><span>.</span><span>memoryUsed</span><span>}</span><span>MB</span><span>"</span> <span>])</span> <span>gpu_info</span><span>.</span><span>append</span><span>([</span> <span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Total Memory</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>gpu</span><span>.</span><span>memoryTotal</span><span>}</span><span>MB</span><span>"</span> <span>])</span> <span>gpu_info</span><span>.</span><span>append</span><span>([</span> <span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}</span><span>GPU Temperature</span><span>{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>,</span> <span>f</span><span>"</span><span>{</span><span>gpu</span><span>.</span><span>temperature</span><span>}</span><span> °C</span><span>"</span> <span>])</span> <span>return</span> <span>gpu_info</span>import GPUtil from colorama import Fore, Style def get_gpu_info(): gpus = GPUtil.getGPUs() gpu_info = [] for gpu in gpus: gpu_info.append([ f"{Fore.MAGENTA}GPU ID{Style.RESET_ALL}", gpu.id ]) gpu_info.append([ f"{Fore.MAGENTA}GPU Name{Style.RESET_ALL}", gpu.name ]) gpu_info.append([ f"{Fore.MAGENTA}GPU Load{Style.RESET_ALL}", f"{gpu.load * 100}%" ]) gpu_info.append([ f"{Fore.MAGENTA}GPU Free Memory{Style.RESET_ALL}", f"{gpu.memoryFree}MB" ]) gpu_info.append([ f"{Fore.MAGENTA}GPU Used Memory{Style.RESET_ALL}", f"{gpu.memoryUsed}MB" ]) gpu_info.append([ f"{Fore.MAGENTA}GPU Total Memory{Style.RESET_ALL}", f"{gpu.memoryTotal}MB" ]) gpu_info.append([ f"{Fore.MAGENTA}GPU Temperature{Style.RESET_ALL}", f"{gpu.temperature} °C" ]) return gpu_info
Enter fullscreen mode Exit fullscreen mode
5. Displaying the Information
Finally, we use tabulate
to display all the collected information in a clean, readable format.
<span>from</span> <span>tabulate</span> <span>import</span> <span>tabulate</span><span>from</span> <span>colorama</span> <span>import</span> <span>Fore</span><span>,</span> <span>Style</span><span>def</span> <span>display_info</span><span>():</span><span>system_info</span> <span>=</span> <span>get_system_info</span><span>()</span><span>cpu_info</span> <span>=</span> <span>get_cpu_info</span><span>()</span><span>memory_info</span> <span>=</span> <span>get_memory_info</span><span>()</span><span>gpu_info</span> <span>=</span> <span>get_gpu_info</span><span>()</span><span>print</span><span>(</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}{</span><span>'</span><span>System Information</span><span>'</span><span>:</span><span>^</span><span>50</span><span>}{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>)</span><span>print</span><span>(</span><span>tabulate</span><span>(</span><span>system_info</span><span>,</span> <span>tablefmt</span><span>=</span><span>"</span><span>fancy_grid</span><span>"</span><span>))</span><span>print</span><span>(</span><span>"</span><span>\n</span><span>"</span><span>)</span><span>print</span><span>(</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}{</span><span>'</span><span>CPU Information</span><span>'</span><span>:</span><span>^</span><span>50</span><span>}{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>)</span><span>print</span><span>(</span><span>tabulate</span><span>(</span><span>cpu_info</span><span>,</span> <span>tablefmt</span><span>=</span><span>"</span><span>fancy_grid</span><span>"</span><span>))</span><span>print</span><span>(</span><span>"</span><span>\n</span><span>"</span><span>)</span><span>print</span><span>(</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}{</span><span>'</span><span>Memory Information</span><span>'</span><span>:</span><span>^</span><span>50</span><span>}{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>)</span><span>print</span><span>(</span><span>tabulate</span><span>(</span><span>memory_info</span><span>,</span> <span>tablefmt</span><span>=</span><span>"</span><span>fancy_grid</span><span>"</span><span>))</span><span>print</span><span>(</span><span>"</span><span>\n</span><span>"</span><span>)</span><span>print</span><span>(</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}{</span><span>'</span><span>GPU Information</span><span>'</span><span>:</span><span>^</span><span>50</span><span>}{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>)</span><span>print</span><span>(</span><span>tabulate</span><span>(</span><span>gpu_info</span><span>,</span> <span>tablefmt</span><span>=</span><span>"</span><span>fancy_grid</span><span>"</span><span>))</span><span>print</span><span>(</span><span>"</span><span>\n</span><span>"</span><span>)</span><span>if</span> <span>__name__</span> <span>==</span> <span>"</span><span>__main__</span><span>"</span><span>:</span><span>display_info</span><span>()</span><span>from</span> <span>tabulate</span> <span>import</span> <span>tabulate</span> <span>from</span> <span>colorama</span> <span>import</span> <span>Fore</span><span>,</span> <span>Style</span> <span>def</span> <span>display_info</span><span>():</span> <span>system_info</span> <span>=</span> <span>get_system_info</span><span>()</span> <span>cpu_info</span> <span>=</span> <span>get_cpu_info</span><span>()</span> <span>memory_info</span> <span>=</span> <span>get_memory_info</span><span>()</span> <span>gpu_info</span> <span>=</span> <span>get_gpu_info</span><span>()</span> <span>print</span><span>(</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>YELLOW</span><span>}{</span><span>'</span><span>System Information</span><span>'</span><span>:</span><span>^</span><span>50</span><span>}{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>)</span> <span>print</span><span>(</span><span>tabulate</span><span>(</span><span>system_info</span><span>,</span> <span>tablefmt</span><span>=</span><span>"</span><span>fancy_grid</span><span>"</span><span>))</span> <span>print</span><span>(</span><span>"</span><span>\n</span><span>"</span><span>)</span> <span>print</span><span>(</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>CYAN</span><span>}{</span><span>'</span><span>CPU Information</span><span>'</span><span>:</span><span>^</span><span>50</span><span>}{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>)</span> <span>print</span><span>(</span><span>tabulate</span><span>(</span><span>cpu_info</span><span>,</span> <span>tablefmt</span><span>=</span><span>"</span><span>fancy_grid</span><span>"</span><span>))</span> <span>print</span><span>(</span><span>"</span><span>\n</span><span>"</span><span>)</span> <span>print</span><span>(</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>GREEN</span><span>}{</span><span>'</span><span>Memory Information</span><span>'</span><span>:</span><span>^</span><span>50</span><span>}{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>)</span> <span>print</span><span>(</span><span>tabulate</span><span>(</span><span>memory_info</span><span>,</span> <span>tablefmt</span><span>=</span><span>"</span><span>fancy_grid</span><span>"</span><span>))</span> <span>print</span><span>(</span><span>"</span><span>\n</span><span>"</span><span>)</span> <span>print</span><span>(</span><span>f</span><span>"</span><span>{</span><span>Fore</span><span>.</span><span>MAGENTA</span><span>}{</span><span>'</span><span>GPU Information</span><span>'</span><span>:</span><span>^</span><span>50</span><span>}{</span><span>Style</span><span>.</span><span>RESET_ALL</span><span>}</span><span>"</span><span>)</span> <span>print</span><span>(</span><span>tabulate</span><span>(</span><span>gpu_info</span><span>,</span> <span>tablefmt</span><span>=</span><span>"</span><span>fancy_grid</span><span>"</span><span>))</span> <span>print</span><span>(</span><span>"</span><span>\n</span><span>"</span><span>)</span> <span>if</span> <span>__name__</span> <span>==</span> <span>"</span><span>__main__</span><span>"</span><span>:</span> <span>display_info</span><span>()</span>from tabulate import tabulate from colorama import Fore, Style def display_info(): system_info = get_system_info() cpu_info = get_cpu_info() memory_info = get_memory_info() gpu_info = get_gpu_info() print(f"{Fore.YELLOW}{'System Information':^50}{Style.RESET_ALL}") print(tabulate(system_info, tablefmt="fancy_grid")) print("\n") print(f"{Fore.CYAN}{'CPU Information':^50}{Style.RESET_ALL}") print(tabulate(cpu_info, tablefmt="fancy_grid")) print("\n") print(f"{Fore.GREEN}{'Memory Information':^50}{Style.RESET_ALL}") print(tabulate(memory_info, tablefmt="fancy_grid")) print("\n") print(f"{Fore.MAGENTA}{'GPU Information':^50}{Style.RESET_ALL}") print(tabulate(gpu_info, tablefmt="fancy_grid")) print("\n") if __name__ == "__main__": display_info()
Enter fullscreen mode Exit fullscreen mode
Example Output
Here’s what the output looks like when you run the script:
Wrapping Up
And there you have it! A stylish and functional Python System Monitor that gives you a comprehensive look at your system’s performance. Feel free to clone the repository, play around with the code, and customize it to your liking. You can find the full project on my GitHub.
I’m new to the development world, and every star on the repo will really motivate me to keep learning and building cool projects. Happy coding!
原文链接:Get Geeky with Python: Build a System Monitor with Flair
暂无评论内容