如何使用Python在Win和MAC上检测进程是否正在运行
我试图找到一种方法来检测Windows任务管理器for Windows OS和Macintosh Activity Monitor for MAC OS是否使用Python运行进程 有人能帮我翻译一下代码吗?是一个跨平台的库,用于检索有关运行进程和系统利用率的信息如何使用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外。错误:
导入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.Wrapout,err=process.communicate()
中可以正常工作,在中使用进程:
以避免资源警告
异常,等。将except:
替换为except索引器
,以仅捕获指示isWindowsProcessRunning
应返回False
的索引错误。这避免了<代码>键盘中断>代码>、代码>系统退出>代码>或编程错误异常的杂散抑制。或者尝试改进单行命令中语法错误的调试。。。这些建议不是“错误的”,而是学术上的过火。此外,您还喜欢一次抑制一些异常,另一次暴露其他异常?在我使用此功能时,我最初没有将communicate()
与包装为process:
,但是ResourceWarnings
阻塞了我的测试日志,很难找到重要的警告/输出。抑制索引器
是有意义的,因为它实际上不是一个错误,而是对原始问题的回答:windows进程是否使用nameexeName
运行<代码>索引器表示“否”。其他异常实际上是异常的,应该传播给调用方。