Pankaj Vatsa Pankaj Vatsa - 1 month ago 5
Python Question

How to detect if a process is running using Python on Win and MAC

I am trying to find out a way to detect if a process is running in Windows Task Manager for Windows OS and Macintosh Activity Monitor for MAC OS using Python

Can someone please help me out with the code please?

Answer

psutil is a cross-platform library that retrieves information about running processes and system utilization.

import psutil

pythons_psutil = []
for p in psutil.process_iter():
    try:
        if p.name() == 'python.exe':
            pythons_psutil.append(p)
    except psutil.Error:
        pass
>>> pythons_psutil
[<psutil.Process(pid=16988, name='python.exe') at 25793424>]

>>> print(*sorted(pythons_psutil[0].as_dict()), sep='\n')
cmdline
connections
cpu_affinity
cpu_percent
cpu_times
create_time
cwd
exe
io_counters
ionice
memory_info
memory_info_ex
memory_maps
memory_percent
name
nice
num_ctx_switches
num_handles
num_threads
open_files
pid
ppid
status
threads
username

>>> pythons_psutil[0].memory_info()
pmem(rss=12304384, vms=8912896)

In a stock Windows Python you can use subprocess and csv to parse the output of tasklist.exe:

import subprocess
import csv

p_tasklist = subprocess.Popen('tasklist.exe /fo csv',
                              stdout=subprocess.PIPE,
                              universal_newlines=True)

pythons_tasklist = []
for p in csv.DictReader(p_tasklist.stdout):
    if p['Image Name'] == 'python.exe':
        pythons_tasklist.append(p)
>>> print(*sorted(pythons_tasklist[0]), sep='\n')
Image Name
Mem Usage
PID
Session Name
Session#

>>> pythons_tasklist[0]['Mem Usage']
'11,876 K'