Cómo detectar si un proceso se está ejecutando usando Python en Win y MAC

Estoy tratando de encontrar una manera de detectar si un proceso se está ejecutando en el Administrador de tareas de Windows para el sistema operativo Windows y el Monitor de actividad de Macintosh para el sistema operativo MAC utilizando Python

¿Puede alguien ayudarme con el código por favor?

psutil es una biblioteca multiplataforma que recupera información sobre los procesos en ejecución y la utilización del sistema.

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 [] >>> 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) 

En un stock de Windows Python puede usar subprocess y csv para analizar la salida de 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' 

Aquí hay un giro de la solución de Windows de eryksun, eliminando la importación de csv y filtrando directamente la salida de la lista de tareas para un nombre exe:

 def isWindowsProcessRunning( exeName ) : import subprocess process = subprocess.Popen( 'tasklist.exe /FO CSV /FI "IMAGENAME eq %s"' % exeName, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True ) out, err = process.communicate() try : return out.split("\n")[1].startswith('"%s"' % exeName) except : return False