Python Linux中的用户空闲时间

Python Linux中的用户空闲时间,python,linux,bash,Python,Linux,Bash,我需要检查在Linux(lucid-10.4)上自上次用户输入(python中的首选方式)以来经过了多少时间 我知道这在正常情况下很容易(仅使用XScreenSaverQueryInfo),但棘手的是我没有x11/extensions/scrnsaver.h头,我必须以其他方式完成(即使我安装了所需的软件包,我也无法在100台其他计算机上安装软件包,因为我没有这样做的权限).在互联网的deps中,我发现了类似的东西,它看起来很有效,但仍然不是完美的解决方案,因为它返回的信息比我需要的多得多,而且

我需要检查在Linux(lucid-10.4)上自上次用户输入(python中的首选方式)以来经过了多少时间


我知道这在正常情况下很容易(仅使用XScreenSaverQueryInfo),但棘手的是我没有x11/extensions/scrnsaver.h头,我必须以其他方式完成(即使我安装了所需的软件包,我也无法在100台其他计算机上安装软件包,因为我没有这样做的权限).

在互联网的deps中,我发现了类似的东西,它看起来很有效,但仍然不是完美的解决方案,因为它返回的信息比我需要的多得多,而且接近正确值的数字不是常数(它在其他系统中不同):

ls-l/dev/pts | fgrep用户名

使用xprintidle

要求:
sudo apt get安装xprintidle

来自命令行的用法:
xprintidle

或者,以秒为单位:
echo$(`xprintidle`/1000))

或者来自python:

milliseconds_string = os.popen("xprintidle").read()
seconds = int(milliseconds_string)/1000

另一种解决方案是使用unix命令
w
,这将提供所有用户的空闲时间(w命令除外,它似乎不会重置空闲时间)

w
命令还有一些标志-s和-f,用于显示短格式,并且不打印主机名,从而为您提供少量查找空闲时间的信息。我能把事情弄清楚

> w -sf | grep user
jxw1234  pts/5      6.00s w -sf
这也使空闲时间减少到秒,因此比ls-l/dev/pts更精确

从这一点来看,使用python的系统界面运行命令并应用正则表达式以各种格式提取时间应该非常简单

编辑: 使用这个,我可以得到以下结果

>w | awk '{if (NR!=1) {print $1,$5 }}' | grep username
jxw1234 1.00s

基于X屏幕保护程序的另一种选择是:


您不需要在目标100台计算机上安装头文件,只需要在构建应用程序的计算机上安装头文件。您是说其他100台计算机不运行X11吗?或者你是说他们没有
scrnsaver.h
?他们有X11,但根据我的发现:“默认情况下没有安装XScreenSaver框架”,而且当我试图从c创建python模块时,编译器会大叫X11/extensions/scrnsaver.h不存在,而且不存在(我签入了usr/libs)您只需要开发机器上的头文件,生成的二进制文件在所有机器上都可以正常工作。也许应该在
xssstate -i