如果在 linux 中激活 window 更改,则执行 python 代码

Execute python code if active window change in linux

我有以下代码,它使用无限循环来检查活动 window 是否有 changed.This 程序在活动 window 更改时打印当前 window 的名称。必须有更好的方法来做到这一点。如何让我的 python 代码始终监听活动的 window 变化而没有无限循环?

import subprocess
import psutil

pid = subprocess.check_output(["xdotool", "getactivewindow", "getwindowpid"]).decode("utf-8").strip()
prevpid=pid
print(pid)
while(True):
    pid = subprocess.check_output(["xdotool", "getactivewindow", "getwindowpid"]).decode("utf-8").strip()
    if prevpid!=pid:
        process=psutil.Process(int(pid))
        processName=process.name()
        print("Current Active Process is "+processName)
        prevpid=pid

如果你在 X 上,而不是轮询,最好使用 Wnck.Screenactive_window_changed 信号,来自 Gtk 循环的 运行。在一个简单的例子中:

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Wnck', '3.0')
from gi.repository import Gtk, Wnck


def dosomething(screen, previous_window):
    try:
        print(
            previous_window.get_name(), "||",
            screen.get_active_window().get_name()
        )
        # or run any action
    except AttributeError:
        pass


wnck_scr = Wnck.Screen.get_default()
wnck_scr.force_update()
wnck_scr.connect("active-window-changed", dosomething)
Gtk.main()