在Unix上的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\',        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
(请参阅Python中的X11空闲时间和重点窗口。) 编辑 上面的代码中添加了一个清理部分,以便可以定期从函数中调用它,因为如果没有提供清理,则由于未关闭显示,xDisplay上可能会发生错误,可以在此链接上找到     
我想您担心文件传输的网络活动会妨碍交互式用户。您无需担心用户是否在键盘上打字。真正重要的是是否存在竞争的网络活动。 例如,在Windows上,您可以使用Background Intelligent Transfer Service。这是Windows Update用于在不妨碍您使用计算机的情况下将更新传递到桌面的服务。要编写脚本,可以考虑使用Powershell。如果您对使用Python一无所知,可以使用
win32com.bits
来完成。 毫无疑问,其他平台也将提供类似的产品。     
大多数Linux发行版都带有ConsoleKit,该控制台通过DBus提供了一些会话信息,包括“空闲提示”。这适用于X11和文本登录。 (但是,有计划弃用ConsoleKit,将其一部分移入systemd;“空闲提示”功能的未来尚未确定。) 仅出于完整性考虑,
os.stat(ttydev).st_mtime
os.fstat(1).st_mtime
返回tty / pty设备的最后输入时间。     
在您的计算机上放置一个网络摄像头,该摄像头每五秒钟捕获一次图像,然后有一些用于图像分析的python模块可以检查您是否仍然坐在座位上。 或将微型开关连接到椅子上,将其连接到PC串行端口(或那些现代USB端口之一),然后从Python读取...     
导入此脚本。当其他应用程序(如firefox)开始获取带宽时,请暂停主程序。包含一些简单的附加内容,但除此之外很简单     

要回复问题请先登录注册