Ale*_*tov 50 python cross-platform jython hp-ux
在主机上运行多个具有相同名称的进程.使用python或jython通过名称获取这些进程的PID的跨平台方法是什么?
pidofpython 一样的东西.(pidof反正我也没有.)/proc因为它可能不可用(在HP-UX上).os.popen('ps')和解析输出,因为我觉得它很难看(字段顺序可能在不同的操作系统中有所不同).Gia*_*olà 71
您可以使用适用于Windows和UNIX的psutil(https://github.com/giampaolo/psutil):
import psutil
PROCNAME = "python.exe"
for proc in psutil.process_iter():
if proc.name() == PROCNAME:
print(proc)
Run Code Online (Sandbox Code Playgroud)
在我的机器上打印:
<psutil.Process(pid=3881, name='python.exe') at 140192133873040>
Run Code Online (Sandbox Code Playgroud)
编辑2017-04-27 - 这是一个更高级的实用程序函数,它根据进程的名称(),cmdline()和exe()检查名称:
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
Run Code Online (Sandbox Code Playgroud)
Iva*_*van 12
没有单一的跨平台API,您必须检查操作系统.对于基于posix的使用/ proc.对于Windows,请使用以下代码获取具有相应进程名称的所有pid的列表
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]
Run Code Online (Sandbox Code Playgroud)
然后,您可以轻松过滤出所需的流程.有关Win32_Process的可用属性的更多信息,请查看Win32_Process类
bac*_*aco 10
import psutil
process = filter(lambda p: p.name() == "YourProcess.exe", psutil.process_iter())
for i in process:
print i.name,i.pid
Run Code Online (Sandbox Code Playgroud)
提供所有"YourProcess.exe"的pid
小智 5
process = [proc for proc in psutil.process_iter() if proc.name == "YourProcess.exe"].
Run Code Online (Sandbox Code Playgroud)
我已经在 Debian 上用 Python 3 试过了,我认为它必须是proc.name()而不是proc.name.
| 归档时间: |
|
| 查看次数: |
63118 次 |
| 最近记录: |