小编1N4*_*001的帖子

在xlib上使用ctypes时出现python3 segfaults,python2可以工作

以下代码是几年前在Internet上发现的,并且在python2中运行良好。它提供X服务器上的当前空闲时间。

import ctypes, os, subprocess
class XScreenSaverInfo( ctypes.Structure ):
    _fields_ = [("window",     ctypes.c_ulong), ("state",      ctypes.c_int), ("kind",       ctypes.c_int), ("since",      ctypes.c_ulong), ("idle",       ctypes.c_ulong), ("event_mask", ctypes.c_ulong)]

xlib = ctypes.cdll.LoadLibrary("libX11.so.6")
xss = ctypes.cdll.LoadLibrary("libXss.so.1")
display = xlib.XOpenDisplay(os.environ["DISPLAY"])
xss.XScreenSaverAllocInfo.restype = ctypes.POINTER(XScreenSaverInfo)
xssinfo = xss.XScreenSaverAllocInfo()

 xss.XScreenSaverQueryInfo(display, xlib.XDefaultRootWindow(display), xssinfo)

 xssinfo.contents.idle
Run Code Online (Sandbox Code Playgroud)

我可以将其放入python2.7.10 shell中并得到我想要的。但是,在python3.4.3 shell上执行相同操作会使我在这一行中遇到分段错误

xss.XScreenSaverQueryInfo(display, xlib.XDefaultRootWindow(display), xssinfo)
Run Code Online (Sandbox Code Playgroud)

我的py3环境坏了吗?py3做不同的事情吗?

python python-2.x xlib python-3.x

2
推荐指数
1
解决办法
262
查看次数

标签 统计

python ×1

python-2.x ×1

python-3.x ×1

xlib ×1