有沒有跨平臺的方法來檢查我的Python腳本是否以管理員權限執行?不幸的是,os.getuid()
僅適用於UNIX,在Windows下不可用。在Windows下的Python腳本中檢查管理權限的跨平臺方法?
13
A
回答
32
import ctypes, os
try:
is_admin = os.getuid() == 0
except AttributeError:
is_admin = ctypes.windll.shell32.IsUserAnAdmin() != 0
print is_admin
4
試着做任何你需要的管理權限,並檢查失敗。
雖然這隻適用於某些事情,但您想做什麼?
3
如果您檢查腳本運行的是哪個平臺(使用sys.platform
),並根據它進行測試(例如,從另一個平臺特定的模塊導入一些hasAdminRights功能。
在Windows上,您可以使用os.access
來檢查Windows\System32
是否可寫,但請記住嘗試檢索系統實際的「Windows」文件夾路徑,可能使用pywin32。不要硬編碼。
1
管理員組成員(域/本地/企業)是一回事..
定製您的應用程序不使用全面的權限和設置細粒度權限是一個更好的選擇,特別是如果正在使用的應用程序iinteractively。
對特定命名權限(se_shutdown se_restore等)進行測試,文件權限更加準確,更容易診斷。
1
這裏有一個效用函數從我接受的答案創建:
import os
import ctypes
class AdminStateUnknownError(Exception):
"""Cannot determine whether the user is an admin."""
pass
def is_user_admin():
# type:() -> bool
"""Return True if user has admin privileges.
Raises:
AdminStateUnknownError if user privileges cannot be determined.
"""
try:
return os.getuid() == 0
except AttributeError:
pass
try:
return ctypes.windll.shell32.IsUserAnAdmin() == 1
except AttributeError:
raise AdminStateUnknownError
相關問題
- 1. 跨平臺的Emacs腳本
- 2. 跨平臺的shell腳本
- 3. 如何查詢Windows批處理腳本中的管理員權限?
- 4. 檢查跨域工作站的管理員權限C#
- 5. 有沒有辦法在Perl中檢查Windows中的管理員權限?
- 6. VBScript:檢查腳本是否具有管理權限
- 7. 獲取Python控制檯腳本默認目錄的跨平臺方法?
- 8. 跨平臺的源代碼管理?
- 9. 管理Github上的跨平臺項目
- 10. 跨平臺的svn管理(Makefiles&Visual Studio)
- 11. 給mac上的python腳本管理權限
- 12. 在跨平臺python中查找usb gps
- 13. 單一方法的管理員權限
- 14. 單一方法的管理員權限
- 15. 權限,Python腳本
- 16. 查找python包含文件夾的跨平臺方法
- 17. 在MySql中管理跨數據庫讀取,查看或權限
- 18. 如何檢查管理員權限C#
- 19. C#管理員權限 - 檢查
- 20. 在Win-7的perl腳本中獲取管理員權限
- 21. 分發跨平臺的python3腳本
- 22. 針對shell腳本的跨平臺getopt
- 23. 跨平臺安裝腳本的語言
- 24. OOTB在運行VS2010 Installer MSI之前檢查管理權限的方法?
- 25. Windows批處理腳本和在HomePath中工作的權限
- 26. 跨腳本權限被拒絕在JavaScript
- 27. 在Clojure(腳本)中編寫跨平臺宏的正確方法是什麼?
- 28. 在我的Google協作平臺的某個位置管理Google Apps腳本的權限
- 29. 在沒有管理員權限的Windows上安裝Python 3.6.2
- 30. 針對windows,Linux,MacOS的跨平臺腳本X
我是一個Linux程序員。什麼是「管理權限」?這是一個許可? – 2009-06-22 10:46:04
root權限,等於「sudo something」 – grigoryvp 2009-06-22 10:52:32
聽起來不像「管理權限」這個概念是跨平臺的話。沒有微不足道的平行線。 – 2009-06-22 11:37:57