2013-05-10 135 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