简体   繁体   English

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

[英]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我试图找到一种方法来检测进程是否在 Windows 操作系统的 Windows 任务管理器和 MAC 操作系统的 Macintosh 活动监视器中运行,使用 Python

Can someone please help me out with the code please?有人可以帮我解决代码吗?

psutil is a cross-platform library that retrieves information about running processes and system utilization. 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
>>> 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 :在股票 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)
>>> print(*sorted(pythons_tasklist[0]), sep='\n')
Image Name
Mem Usage
PID
Session Name
Session#

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

Here's a spin off of eryksun's Windows specific solution (using only built-in python modules) dropping the csv import and directly filtering tasklist output for an exe name:这是 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM