2013-05-10 72 views
0

我正在尝试开发一个脚本或工具来说明每个用户占用计算机的时间,以便管理和平衡资源。至于用户名,Python提供了一种干净的方式来通过os.getlogin()来获取它。但是,我搜索并找不到一个整洁的Python API方法来获取该特定用户的登录和注销时间。对于Windows,我必须“查询用户”,这对Windows XP不起作用。而对于Linux,我不得不承认我不擅长它。你们是否知道跨平台和Python API的方式来做到这一点?如何通过Python为Windows和Linux获取用户登录/注销时间?

非常感谢! 迪

+0

对于linux [this](http://www.cyberciti.biz/faq/linux-display-date-and-time-of-login/)页面可能会对您有所帮助。 – Bakuriu 2013-05-10 20:40:27

+0

win32api有NetUserEnum http://docs.activestate.com/activepython/2.5/pywin32/win32net__NetUserEnum_meth.html,它看起来像你使用2级别,你会得到last_login作为返回的用户信息字段... ...应该工作得很好XP – 2013-05-10 20:51:09

回答

2

的Windows解决方案(应该在XP上运行)

>>> import win32net,time 
>>> users,nusers,_ = win32net.NetUserEnum(None,2) 
>>> for user in users: 
... print "%-20s %s"%(user['name'],time.ctime(user['last_logon'])) 
... 
Administrator  Sat Oct 06 04:59:59 2012 
Bob     Mon Nov 05 10:03:17 2012 
Guest    Wed Dec 31 16:00:00 1969 
joran    Fri May 10 08:04:36 2013 
SophosSAUNEREUS0  Fri May 10 13:31:26 2013 
Umläut    Tue Nov 13 16:21:49 2012 

可以使用

import platform 
platform.uname() 

,以确定您所在的操作系统,并使用一个单独的方法为每个操作系统,例如

import platform 
os_name = platform.uname()[0].lower() 
if os_name == "windows": 
    get_win_login_time() 
elif os_name.endswith("nix"): 
    get_nix_login_time() 
.... 

回答你的问题re网络用户

import win32net, win32netcon, platform 

win32net.NetUserEnum(win32net.NetGetDCName(),2,win32netcon.FILTER_NORMAL_ACCOUNT) 
+0

感谢您的解决方案。 win32net是否与Python3.3兼容?我现在正在使用Python3。 – user2371393 2013-05-10 21:04:04

+0

https://pypi.python.org/pypi/pywin32 ...看起来像是 – 2013-05-10 21:07:41

+0

我使用了这种方法。但是,它只能打印“管理员”和“访客”,不需要用户:“\\ COMPANY_DOMAIN \ EMPLOYEE_ID”。我应该如何将域名作为参数传递给“NetUserEnum()”? – user2371393 2013-05-13 19:11:31

相关问题