如果在 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.Screen 的 active_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()
我有以下代码,它使用无限循环来检查活动 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.Screen 的 active_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()