我希望我的Python脚本能够在Vista上复制文件.当我从普通cmd.exe窗口运行它时,不会生成错误,但不会复制文件.如果我运行cmd.exe"作为管理员",然后运行我的脚本,它工作正常.
这是有道理的,因为用户帐户控制(UAC)通常会阻止许多文件系统操作.
有没有办法可以在Python脚本中调用UAC提升请求(这些对话框说"像这样的应用程序需要管理员访问权限,这样可以吗?")
如果那是不可能的,那么我的脚本是否有一种方法可以至少检测到它没有被提升以便它可以优雅地失败?
我收到这个错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1538, in __call__
return self.func(*args)
File "C:/Users/Marc/Documents/Programmation/Python/Llamachat/Llamachat/Llamachat.py", line 32, in download
with open(place_to_save, 'wb') as file:
PermissionError: [Errno 13] Permission denied: '/goodbye.txt'
Run Code Online (Sandbox Code Playgroud)
运行时:
def download():
# get selected line index
index = films_list.curselection()[0]
# get the line's text
selected_text = films_list.get(index)
directory = filedialog.askdirectory(parent=root,
title="Choose where to save your movie")
place_to_save = directory + '/' + selected_text
print(directory, selected_text, place_to_save)
with open(place_to_save, 'wb') as file:
connect.retrbinary('RETR ' …Run Code Online (Sandbox Code Playgroud) 我编写了一个Python程序,我使用pyinstaller进行分发.onefile到目前为止,我一直在使用该选项来创建独立的可执行文件.到目前为止,这一直很好,但随着应用程序的增长,启动时间变得有点长.我也希望用户正确安装应用程序以使升级更简单.
我一直在尝试使用pyinstaller onedir选项创建应用程序的单个目录版本.但是,生成的.exe文件需要管理员权限才能运行,而onefile版本则没有.程序本身不需要任何这样的权限,所以我认为这是pyinstaller正在做的事情.如何创建不需要管理员权限的应用程序?
附加信息:
我想在csv文件中编写Windows用户名.我在Linux中编写了这个脚本,通过krdc和RDP协议连接到Win10 PC .我通过Win10在远程桌面应用程序上共享了我的Linux驱动器,然后在Win10中从该共享磁盘运行了这个scipt.
如果我通过命令提示符以管理员身份执行此操作,则按预期运行 但是,如果我以普通用户身份运行并确认UAC Yes,则不会创建输出文件.
如何以普通用户身份运行此脚本,回答yesUAC并在krdc远程应用程序中通过rdp协议将我的已安装驱动器写入该文件,其中Win10将该驱动器视为\\TSCLIENT?
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import ctypes
import sys
import subprocess
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
if is_admin():
subprocess.call(['wmic', '/output:usracc.txt', 'useraccount', 'list', 'full', '/format:csv'])
else:
# Re-run the program with admin rights
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
Run Code Online (Sandbox Code Playgroud) 有没有办法将一些runas=Truearg传递给subprocess.runpython中的函数?我想以管理员身份运行一个进程(提升它)。感谢您的回答:)\
编辑:使用 Windows 操作系统。
我需要为Windows 8.1及更低版本创建一个可执行文件,所以我尝试了Py2Exe(没有成功),然后是PyInstaller,该死的,它有效.现在我需要以管理员身份运行它(每次都使用管理任务).我的实际编译脚本如下所示:
python pyinstaller.py --onefile --noconsole --icon=C:\Python27\my_distrib\ico_name --name=app_name C:\Python27\my_distrib\script.py
是否可以选择使用UAC或类似的东西?(对我来说很糟糕)
此外,每次我在我的笔记本电脑的Windows 8.1(我的台式电脑是Windows 7)上启动它,它说这是危险的...任何使它成为"信任"exe的东西?提前致谢
我必须将DLL文件复制到C:\ Windows\System32文件夹.我得到许可拒绝错误.除了以管理员身份运行脚本之外,还有其他方法吗?
这不起作用:
import os
import sys
import shutil
import win32com.shell.shell as shell
ASADMIN = 'asadmin'
if sys.argv[-1] != ASADMIN:
script = os.path.abspath(sys.argv[0])
params = ' '.join([script] + sys.argv[1:] + [ASADMIN])
print "params : ", params, " script : ", script
shell.ShellExecuteEx(lpVerb='runas',
lpFile=sys.executable,
lpParameters=params)
print "I am root now."
nvcudadll = "C:\\Users\\alankritag\\Desktop\\abc.dll"
winpath = os.environ['WINDIR'] + "\\System32"
shutil.copyfile(nvcudadll, winpath)
Run Code Online (Sandbox Code Playgroud) python ×5
windows ×3
pyinstaller ×2
uac ×2
admin ×1
pygame ×1
pyqt4 ×1
python-3.x ×1
rdp ×1
subprocess ×1
tkinter ×1