Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich ein Python-Skript mit erhöhten Rechten unter Windows ausführen?
Skript mit erhöhten Berechtigungen unter Windows ausführen
In Windows erfordern einige Aufgaben erhöhte Berechtigungen, was sich auf Berechtigungen bezieht, die über der Standardbenutzerebene liegen. Dies kann für bestimmte Verwaltungsaktionen erforderlich sein, wie zum Beispiel das Ändern von Systemeinstellungen oder den Zugriff auf geschützte Dateien.
Um ein Skript mit erhöhten Rechten auszuführen, können Sie ein Modul wie pyuac verwenden. Die neueste Version dieses Pakets finden Sie auf PyPi und GitHub. So installieren Sie es mit pip:
pip install pyuac pip install pypiwin32
Nach der Installation finden Sie hier ein Beispiel für die Verwendung von pyuac:
import pyuac def main(): print("Do stuff here that requires elevated privileges.") # The window will disappear as soon as the program exits! input("Press enter to close the window. >") if __name__ == "__main__": if not pyuac.isUserAdmin(): print("Re-launching as admin!") pyuac.runAsAdmin() else: main() # Already an admin here.
Alternativ, wenn Sie einen Decorator verwenden möchten:
from pyuac import main_requires_admin @main_requires_admin def main(): print("Do stuff here that requires elevated privileges.") # The window will disappear as soon as the program exits! input("Press enter to close the window. >") if __name__ == "__main__": main()
Wenn Sie kein zusätzliches Paket nutzen möchten, können Sie auch auf das von Preston Landers bereitgestellte Skript zurückgreifen. Mit diesem Skript können Sie überprüfen, ob der Benutzer über Administratorrechte verfügt, und andernfalls eine UAC-Erhöhung anfordern. Hier ist ein Beispiel für die Verwendung:
import admin if not admin.isUserAdmin(): admin.runAsAdmin()
Codeausschnitt des vollständigen Skripts:
#!/usr/bin/env python # -*- coding: utf-8; mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vim: fileencoding=utf-8 tabstop=4 expandtab shiftwidth=4 import sys, os, traceback, types def isUserAdmin(): if os.name == 'nt': import ctypes # WARNING: requires Windows XP SP2 or higher! try: return ctypes.windll.shell32.IsUserAnAdmin() except: traceback.print_exc() print "Admin check failed, assuming not an admin." return False elif os.name == 'posix': # Check for root on Posix return os.getuid() == 0 else: raise RuntimeError, "Unsupported operating system for this module: %s" % (os.name,) def runAsAdmin(cmdLine=None, wait=True): if os.name != 'nt': raise RuntimeError, "This function is only implemented on Windows." import win32api, win32con, win32event, win32process from win32com.shell.shell import ShellExecuteEx from win32com.shell import shellcon python_exe = sys.executable if cmdLine is None: cmdLine = [python_exe] + sys.argv elif type(cmdLine) not in (types.TupleType,types.ListType): raise ValueError, "cmdLine is not a sequence." cmd = '"%s"' % (cmdLine[0],) # XXX TODO: isn't there a function or something we can call to massage command line params? params = " ".join(['"%s"' % (x,) for x in cmdLine[1:]]) cmdDir = '' showCmd = win32con.SW_SHOWNORMAL #showCmd = win32con.SW_HIDE lpVerb = 'runas' # causes UAC elevation prompt. # print "Running", cmd, params # ShellExecute() doesn't seem to allow us to fetch the PID or handle # of the process, so we can't get anything useful from it. Therefore # the more complex ShellExecuteEx() must be used. # procHandle = win32api.ShellExecute(0, lpVerb, cmd, params, cmdDir, showCmd) procInfo = ShellExecuteEx(nShow=showCmd, fMask=shellcon.SEE_MASK_NOCLOSEPROCESS, lpVerb=lpVerb, lpFile=cmd, lpParameters=params) if wait: procHandle = procInfo['hProcess'] obj = win32event.WaitForSingleObject(procHandle, win32event.INFINITE) rc = win32process.GetExitCodeProcess(procHandle) #print "Process handle %s returned code %s" % (procHandle, rc) else: rc = None return rc def test(): rc = 0 if not isUserAdmin(): print "You're not an admin.", os.getpid(), "params: ", sys.argv #rc = runAsAdmin(["c:\Windows\notepad.exe"]) rc = runAsAdmin() else: print "You are an admin!", os.getpid(), "params: ", sys.argv rc = 0 x = raw_input('Press Enter to exit.') return rc if __name__ == "__main__": sys.exit(test())
Das obige ist der detaillierte Inhalt vonWie kann ich ein Python-Skript mit erhöhten Rechten unter Windows ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!