Python 如何从.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”)的命令可以

我使用的是Regolith,它加载了大量的Xresources,在一些Xresources文件中使用了像
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的安装。