Python 如何从.Xresources加载变量?
我使用的是Regolith,它加载了大量的Xresources,在一些Xresources文件中使用了像Python 如何从.Xresources加载变量?,python,xlib,Python,Xlib,我使用的是Regolith,它加载了大量的Xresources,在一些Xresources文件中使用了像i3-wm.font:typeface\u wm这样的变量。据我所知,这些应该加载到X11窗口系统中,可以从那里读取。如何在python脚本中获得该值,而不需要自己解析文件 我找到了python3xlib模块,我想它应该能够做到这一点,但我真的无法从中得出头绪。。。我知道Xlib是非常低级和复杂的,但我真的希望有一个类似于Xlib.get_resource(“i3 wm.font”)的命令可以
i3-wm.font:typeface\u wm
这样的变量。据我所知,这些应该加载到X11窗口系统中,可以从那里读取。如何在python脚本中获得该值,而不需要自己解析文件
我找到了
python3xlib
模块,我想它应该能够做到这一点,但我真的无法从中得出头绪。。。我知道Xlib是非常低级和复杂的,但我真的希望有一个类似于Xlib.get_resource(“i3 wm.font”)
的命令可以为我提供所需的资源。你说得对,这看起来很复杂
不过,我在github上发现了一些随机代码,其中有一些线索。仅允许读取的蒸馏版本为:
import Xlib
from Xlib.Xatom import RESOURCE_MANAGER, STRING
res_prop = Xlib.display.Display().screen().root.get_full_property(RESOURCE_MANAGER, STRING)
res_kv = (line.split(':', 1) for line in res_prop.value.decode().split('\n'))
res_dict = {kv[0]: kv[1].strip() for kv in res_kv if len(kv) == 2}
不过请记住,这只会抓取整个数据库并将其放入dict中,以便您可以查找精确的键。特别是,它不做X的其他部分所关注的全球化。然而,这应该足以让你开始。特别是
res_dict['i3-wm.font']
将为您提供这些信息。感谢您挖掘这些信息!我必须从Xlib.display导入display,并相应地更改res_prop
行,使其工作,但它确实解决了问题。我的解决方法是使用子流程调用xrdb-query
。从您需要对输出执行的操作来看,结果有点类似:。谢谢,这确实需要一些挖掘,但激励我的是,想到有python和libs的强大功能,我们仍然必须精打细算并运行xrdb
,这让我感到厌烦。。。什么是我们不能做的?所以现在我知道。。。而且您不必依赖于xrdb的安装。