我希望我的Python脚本在Vista上复制文件。当我从普通cmd.exe窗口运行它时,不会生成任何错误,但不会复制文件。如果我以cmd.exe“管理员身份”运行,然后运行我的脚本,则可以正常运行。
cmd.exe
这是有道理的,因为用户帐户控制(UAC)通常会阻止许多文件系统操作。
我有没有办法从Python脚本中调用UAC提升请求(这些对话框中会说“诸如此类应用需要管理员访问权限,这样可以吗?”)
如果这不可能,那么我的脚本是否可以至少检测到未提升的脚本,从而可以正常地失败?
import ctypes, sys def is_admin(): try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False if is_admin(): # Code of your program here else: # Re-run the program with admin rights ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
如果你使用的是Python 2.x,则应将最后一行替换为:
ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)
还要注意的是,如果你转换你的Python脚本到一个可执行文件(使用工具,如py2exe,cx_freeze,pyinstaller),那么你应该更换第四个参数为空字符串(”“)。
py2exe,cx_freeze,pyinstaller
这里的一些优点是: