如何在Win和MAC上使用Python检测进程是否正在运行

Pan*_*tsa 14 python process

我试图找到一种方法来检测进程是否在Windows操作系统的Windows任务管理器和使用Python的MAC操作系统的Macintosh活动监视器中运行

有人可以帮我解决一下代码吗?

Ery*_*Sun 21

psutil是一个跨平台库,用于检索有关正在运行的进程和系统利用率的信息.

import psutil

pythons_psutil = []
for p in psutil.process_iter():
    try:
        if p.name() == 'python.exe':
            pythons_psutil.append(p)
    except psutil.Error:
        pass
Run Code Online (Sandbox Code Playgroud)
>>> 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)
Run Code Online (Sandbox Code Playgroud)

在库存Windows Python中,您可以使用subprocesscsv解析输出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)
Run Code Online (Sandbox Code Playgroud)
>>> print(*sorted(pythons_tasklist[0]), sep='\n')
Image Name
Mem Usage
PID
Session Name
Session#

>>> pythons_tasklist[0]['Mem Usage']
'11,876 K'
Run Code Online (Sandbox Code Playgroud)

  • 我可以只使用Python(os/subprocess /任何其他模块)并且不使用任何外部模块 (2认同)

Buv*_*inJ 5

这是 eryksun 的 Windows 特定解决方案(仅使用内置 python 模块)的衍生产品,删除 csv 导入并直接过滤任务列表输出以获取 exe 名称:

import subprocess

def isWindowsProcessRunning( exeName ):                    
    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
Run Code Online (Sandbox Code Playgroud)