python - Linux中使用Python获取事件窗口的进程

标签 python linux process window

借助这些

Get active window title in X

Obtain Active window using Python

我已经设法找到事件窗口的名称

import os, re, sys
from subprocess import PIPE, Popen

def get_active_window_title():

    root = Popen( ['xprop', '-root', '_NET_ACTIVE_WINDOW'], stdout = PIPE )
    stdout, stderr = root.communicate()

    m = re.search( b'^_NET_ACTIVE_WINDOW.* ([\w]+)$', stdout )

    if m is not None:
        window_id = m.group( 1 )
        window = Popen( ['xprop', '-id', window_id, 'WM_NAME'], stdout = PIPE )
        stdout, stderr = window.communicate()

        match = re.match( b'WM_NAME\(\w+\) = (?P<name>.+)$', stdout )
        if match is not None:
            return match.group( 'name' ).decode( 'UTF-8' ).strip( '"' )

    return 'Active window not found'

if __name__ == '__main__':
    print( get_active_window_title() )

但是,我也对控制窗口的进程名称(firefox、rstudio...)感兴趣。

关于如何进行的任何想法?

最佳答案

看看 this回答。它使用名为 xprop 的命令行工具和名为 wmctrl 的命令行工具来获取事件窗口的 PID。获得 PID 后,您就可以获得有关该进程的几乎任何信息。例如,要获取进程的名称,可以使用 python subprocess 模块执行以下命令:

ps -p 1337 -o comm=

上面将为您提供命令的名称,而以下内容:

ps -p 1337 -o command=

将为您提供命令的完整路径。

示例(Ubuntu 17.10):

命令:

ps -p 1 -o comm=

输出:

init

命令:

ps -p 1 -o command=

输出:

/sbin/init

关于python - Linux中使用Python获取事件窗口的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46628209/

相关文章:

python - Pandas .filter() 属性的 Dask 等价物是什么?

ruby - Bash语法错误在Ruby中执行命令,但它在shell中有效

linux - Netlink 套接字和 libnl - nl_recvmsgs_default 返回 -16 (EBUSY)

regex - 使用 Regex 识别文件名中两个不同子字符串中的任何一个?

c# - 如何删除路径中的空格?

python - 正则表达式中的意外结果

Python:处理循环中不存在的字典值

multithreading - 如何在Unix中使用fork()?为什么不使用fork(pointerToFunctionToRun)形式的东西?

python - RabbitMQ 排队的消息不断增加

c++ - C++ 中的 Linux 进程加载器