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

如何使用Python在Win和MAC上检测进程是否正在运行,python,process,Python,Process,我试图找到一种方法来检测Windows任务管理器for Windows OS和Macintosh Activity Monitor for MAC OS是否使用Python运行进程 有人能帮我翻译一下代码吗?是一个跨平台的库,用于检索有关运行进程和系统利用率的信息 导入psutil 蟒蛇_psutil=[] 对于psutil.process_iter()中的p: 尝试: 如果p.name()=“python.exe”: pythons_psutil.append(p) 除psutil外。错误:

我试图找到一种方法来检测Windows任务管理器for Windows OS和Macintosh Activity Monitor for MAC OS是否使用Python运行进程

有人能帮我翻译一下代码吗?

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

导入psutil
蟒蛇_psutil=[]
对于psutil.process_iter()中的p:
尝试:
如果p.name()=“python.exe”:
pythons_psutil.append(p)
除psutil外。错误:
通过
蟒蛇 [] >>>打印(*已排序(pythons\u psutil[0]。作为\u dict()),sep='\n') 内核命令行 连接 cpu_亲和力 cpu_百分比 cpu\U时间 创造时间 cwd exe io_计数器 爱奥尼斯 内存信息 记忆信息 内存映射 内存单位百分比 名称 美好的 num_ctx_开关 num_句柄 线程数 打开文件 pid ppid 地位 线程 用户名 >>>pythons\u psutil[0]。内存\u信息() pmem(rss=12304384,vms=8912896)
在Windows Python中,您可以使用
subprocess
csv
解析
tasklist.exe
的输出:

导入子流程
导入csv
p_tasklist=subprocess.Popen('tasklist.exe/fo csv',
stdout=子流程.PIPE,
通用(新行=真)
蟒蛇_任务列表=[]
对于csv.DictReader(p_tasklist.stdout)中的p:
如果p['Image Name']=='python.exe':
pythons_tasklist.append(p)
打印(*已排序(Python_任务列表[0]),sep='\n') 图像名称 内存使用 PID 会话名称 会议# >>>pythons_任务列表[0]['Mem用法'] ‘11876K’
以下是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

下面是如何在Windows上获取正在运行的进程:--下面是如何在OSX上获取正在运行的进程信息:我可以只使用Python(os/子进程/任何其他模块)而不使用任何外部module@jake77,此答案不会调用
get\u pid\u list
,也不会调用它。最初我使用的是
get\u process\u list
,但在较新版本的psutil中不再提供,因此去年我更新了答案,使用
process\u iter
。这在psutil 3.2.2.Wrap
out,err=process.communicate()
中可以正常工作,在
中使用进程:
以避免
资源警告
异常,等。将
except:
替换为
except索引器
,以仅捕获指示
isWindowsProcessRunning
应返回
False
的索引错误。这避免了<代码>键盘中断>代码>、代码>系统退出>代码>或编程错误异常的杂散抑制。或者尝试改进单行命令中语法错误的调试。。。这些建议不是“错误的”,而是学术上的过火。此外,您还喜欢一次抑制一些异常,另一次暴露其他异常?在我使用此功能时,我最初没有将
communicate()
包装为process:
,但是
ResourceWarnings
阻塞了我的测试日志,很难找到重要的警告/输出。抑制
索引器
是有意义的,因为它实际上不是一个错误,而是对原始问题的回答:windows进程是否使用name
exeName
运行<代码>索引器表示“否”。其他异常实际上是异常的,应该传播给调用方。