我想写一个脚本来做一个沉重的网络上传,在后台。
但是,我希望它在我使用计算机时暂停(通过检测网络活动或键盘活动或我没有空闲)。
在UNIX上的python上,检测我正在使用计算机的最佳方法是什么?

最佳答案

使用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

(请参见X11 idle time and focused window in Python
编辑
在上述代码中添加的一个清理部分,以便可以从函数中定期调用它,因为如果没有提供清理,则xDisplay上可能会由于未关闭显示而发生错误,如本节所述link

07-25 23:38
查看更多