首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何跨平台获取python中进程名的PID?

如何跨平台获取python中进程名的PID?
EN

Stack Overflow用户
提问于 2018-08-20 09:50:30
回答 2查看 0关注 0票数 0

在主机上运行多个具有相同名称的进程。使用pythonjython通过名称获取这些进程的PID的跨平台方法是什么?

  1. 我想要像pidofpython 一样的东西。(pidof反正我也没有。)
  2. 我无法解析,/proc因为它可能不可用(在HP-UX上)。
  3. 我不想运行os.popen('ps')和解析输出,因为我觉得它很难看(字段顺序可能在不同的操作系统中有所不同)。
  4. 目标平台是Solaris,HP-UX和其他平台。
EN

回答 2

Stack Overflow用户

发布于 2018-08-20 18:28:47

没有单一的跨平台API,你必须检查操作系统。对于基于posix的使用/ proc。对于Windows,使用以下代码获取具有相应进程名称的所有pid的列表

代码语言:javascript
复制
from win32com.client import GetObject
WMI = GetObject('winmgmts:')
processes = WMI.InstancesOf('Win32_Process')
process_list = [(p.Properties_("ProcessID").Value, p.Properties_("Name").Value) for p in processes]
票数 0
EN

Stack Overflow用户

发布于 2018-08-20 19:09:33

你可以使用适用于Windows和UNIX的psutil(https://github.com/giampaolo/psutil):

代码语言:javascript
复制
import psutil

PROCNAME = "python.exe"

for proc in psutil.process_iter():
    if proc.name() == PROCNAME:
        print(proc)

在我的机器上打印:

代码语言:javascript
复制
<psutil.Process(pid=3881, name='python.exe') at 140192133873040>

这是一个更高级的实用程序函数,它根据进程的名称(),cmdline()和exe()检查名称:

代码语言:javascript
复制
import os
import psutil

def find_procs_by_name(name):
    "Return a list of processes matching 'name'."
    assert name, name
    ls = []
    for p in psutil.process_iter():
        name_, exe, cmdline = "", "", []
        try:
            name_ = p.name()
            cmdline = p.cmdline()
            exe = p.exe()
        except (psutil.AccessDenied, psutil.ZombieProcess):
            pass
        except psutil.NoSuchProcess:
            continue
        if name == name_ or cmdline[0] == name or os.path.basename(exe) == name:
            ls.append(name)
    return ls
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100002300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档