Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python在Win和MAC上检测进程是否正在运行_Python_Process - Fatal编程技术网

如何使用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\U iter中的p: 尝试: 如果p.name='python.exe': 蟒蛇 除psutil外。错误: 通过 >>>蟒蛇 [] >>>打印*sorted

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

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

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

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

导入子流程 导入csv p_tasklist=subprocess.Popen'tasklist.exe/fo csv', stdout=子流程.PIPE, 通用新行=真 蟒蛇_任务列表=[] 对于csv.DictReaderp_tasklist.stdout中的p: 如果p['Image Name']=='python.exe': pythons_tasklist.appendp >>>打印*sortedpythons\u任务列表[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上获取正在运行的进程信息:我可以只使用Pythonos/子进程/任何其他模块而不使用任何外部module@jake77,此答案不调用get\u pid\u list,也从未调用过它。最初我使用的是get_process_list,但在较新版本的psutil中不再提供该列表,因此去年我更新了使用process_iter的答案。这在psutil 3.2.2.Wrap out中可以正常工作,err=process。与进程通信:以避免资源警告、中断管道异常等。替换除外:与除外Indexer仅捕获指示isWindowsProcessRunning应返回False的索引错误。这避免了对键盘中断、系统退出或编程错误异常的杂乱无章的抑制。这个函数在结果中太快和太可预测,以至于担心在其中间试图尊重键盘中断,或者试图改进单行命令中的语法错误的调试。这些建议没有错,但在学术上有些过火。此外,您还支持一次抑制一些异常,另一次暴露其他异常?在我使用此功能时,我最初没有包装与process:通信,但ResourceWarnings阻塞了我的测试日志,因此很难找到重要的警告/输出。抑制IndexError是有意义的,因为它实际上不是一个错误,而是对原始问题的回答:windows进程是否以exeName运行?IndexError表示否。其他异常实际上是异常的,应该传播给调用方。