加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Unix上的Python中,确定我是否在使用我的电脑?还是闲着?

发布时间:2020-12-16 01:21:04 所属栏目:安全 来源:网络整理
导读:我想写一个脚本来在后台进行繁重的网络上传. 但是,我希望它在我使用计算机时暂停(通过检测网络活动或键盘活动或我不闲置). 在Unix上用Python检测我正在使用计算机的最佳方法是什么? 使用X11 / XScreenSaver获取空闲时间的Unixy解决方案: #!/usr/bin/python
我想写一个脚本来在后台进行繁重的网络上传.
但是,我希望它在我使用计算机时暂停(通过检测网络活动或键盘活动或我不闲置).

在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',# blanked,internal,external
              ('since',# milliseconds
              ('idle',# 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上找到

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读