在Linux上检索和设置窗口信息(通过扩展窗口管理器提示)
ruamel.ewmh的Python项目详细描述
中国==== EWMH公司 ===
ewmh(扩展窗口管理器提示)可用于检索和设置 有关Linux系统上Windows的信息。是通过打电话和 正在分析wmctrl等程序的输出。
示例
from subprocess import Popen from ruamel.ewmh import ExtendedWindowManagerHints as EWMH Popen(['xclock', '-name', 'test_xclock']) # there can be more than one window matching the title # therfore .by_title() returns a list clk = EWMH().by_title('test_xclock')[0] clk.resize_and_move(200, 200, 300, 600)
为什么不使用wmctrl包?
在编写这个库之前,我尝试了antonio cuni的wmctrl包。那个 图书馆似乎被废弃(至少从2013年4月到2014年10月)。
我开始ewmh是因为遇到性能问题和不规则 最初我无法修复的异常。当我发现这些问题 是设计决定的结果,与我没有 需要(例如检索wm_类),而且因为我需要一些更简单的东西, 但是工作,我从零开始。
- wmctrl未缓存输出信息并获取 信息一开始就太慢了。如果你的机器有 窗口打开,您希望其中n个窗口的状态,这导致 通过 commands.getoutput。在我的系统上有200多个打开的窗口, 对于我感兴趣的每个窗口,信息花费了几秒钟。 在。
- commands.getoutput()已被使用,但已被deprecated since 2008使用 subprocess.checkout_output()取而代之。
- 未检查getoutput()的输出是否有错误。
- os.system()的使用导致不必要的shell调用。
- 对于系统上打开的每个窗口,xprop程序都称为, 尽管,通常,这些信息都不被使用。
- 若要激活Windows,包将使用wmctrl -id-a <ID>调用wmctrl, 我不知道如果没有这个命令 具有相同的效果/输出。
在尝试修补这些问题并进行测试之后,会出现一些异常,迫使我放弃它,因为从头开始要花费更少的时间。通过编写emwh获得的知识,我发现wmctrl包目前至少不能处理包含空格的窗口类,当桌面上有一个没有标题的窗口时,程序也不能继续调用库。
wmctrl库中包含的大多数原始测试仅适用于 小调整(这似乎与我的窗口菜单顶部有关) 以及emwh中的包装类。从wmctrl移动到ewmh应该 所以要轻松。