获取与活动窗口对应的进程的名称

获取与活动窗口对应的进程的名称

如何在 Ubuntu 中使用 Python 来完成此操作?

答案1

psutil这似乎就是你想要的。

您的问题中不清楚的是您想要的是可执行文件名称还是窗口标题。但是,如果您想要的是可执行进程的名称,您可以使用psutil和其他一些函数来实现。

首先,psutil使用pip(Python 2) 或pip3(Python 3) 安装。如果找不到命令,则根据您使用的 Python 版本安装python-pip或包:python3-pip

# Python 2
sudo pip install psutil

# Python 3
sudo pip3 install psutil

接下来,我们可以psutil在任何给定的 Python 脚本中使用并传递 PID。这是它可以执行的操作的示例,通过python3在命令行中运行,使用交互式 Python 3 shell,并在 Python shell 上使用 Python 代码获取该进程的信息:

>>> import psutil
>>> import os
>>> os.getpid()
6284
>>> p = psutil.Process(os.getpid())
>>> p.name()
'python3'
>>> p.exe()
'/usr/bin/python3.5'
>>> p.cmdline()
['python3']
>>>

如您所见,您可以使用这些实用程序从系统获取有关 Windows 或 Linux 上的进程的不同信息,但您仍然需要先安装 Python 包。


编辑

我们也可以将其串联起来雅各布·弗莱姆这里的答案也是,获取 PID 并将其传递给psutil(请注意,我在导入中将“subprocess”缩短为“sp”,但它仍然是模块subprocess):

import psutil
import subprocess as sp

p = psutil.Process(int(sp.check_output(["xdotool", "getactivewindow", "getwindowpid"]).decode("utf-8").strip()))

...然后继续使用psutil来提取特定数据。

答案2

简短回答

import subprocess

pid = subprocess.check_output(["xdotool", "getactivewindow", "getwindowpid"]).decode("utf-8").strip()

print(pid)

但您需要安装xdotool

sudo apt install xdotool

获取 WM_CLASS 的名称

我们甚至可以超越pid:

#!/usr/bin/env python3
import subprocess

w_id = subprocess.check_output(["xdotool", "getactivewindow"]).decode("utf-8")
name = subprocess.check_output(["xprop", "-id", w_id, "WM_CLASS"]).decode("utf-8").strip()

print(name)

但要记住的是,WM_CLASS 经常(但不一定总是)是进程姓名

答案3

import wnck
screen = wnck.screen_get_default()
window = screen.get_active_window()
pid = window.get_pid()

相关内容