Jos*_*ian 8 python keyboard networking python-idle
我想写一个脚本来在后台进行繁重的网络上传.但是,我希望它在我使用计算机时暂停(通过检测网络活动或键盘活动或我不闲置).
在Unix上用Python检测我正在使用计算机的最佳方法是什么?
pet*_*eth 10
使用X11/XScreenSaver获取空闲时间的Unixy解决方案:
#!/usr/bin/python
import ctypes
import os
class XScreenSaverInfo( ctypes.Structure):
""" typedef struct { ... } XScreenSaverInfo; """
_fields_ = [('window', ctypes.c_ulong), # screen saver window
('state', ctypes.c_int), # off,on,disabled
('kind', ctypes.c_int), # blanked,internal,external
('since', ctypes.c_ulong), # milliseconds
('idle', ctypes.c_ulong), # milliseconds
('event_mask', ctypes.c_ulong)] # events
xlib = ctypes.cdll.LoadLibrary('libX11.so')
display = xlib.XOpenDisplay(os.environ['DISPLAY'])
xss = ctypes.cdll.LoadLibrary('libXss.so.1')
xss.XScreenSaverAllocInfo.restype = ctypes.POINTER(XScreenSaverInfo)
xssinfo = xss.XScreenSaverAllocInfo()
xss.XScreenSaverQueryInfo(display, xlib.XDefaultRootWindow(display), xssinfo)
idletime = xssinfo.contents.idle
# Cleaning Up
xss.XFree(xssinfo)
xss.XCloseDisplay(display)
print "idle: %d ms" % idletime
Run Code Online (Sandbox Code Playgroud)
(请参阅X11中的X11空闲时间和聚焦窗口.)
编辑 上面代码中添加的清理部分,以便可以定期从函数调用,因为如果没有提供清理,则xDisplay可能会因为未关闭显示而发生错误,因为可以在此链接上找到