使用Python在Windows上传递管理权限
我已经创建了一个简单的使用Python在Windows上传递管理权限,python,tkinter,subprocess,administration,administrator,Python,Tkinter,Subprocess,Administration,Administrator,我已经创建了一个简单的Tkinter应用程序,它可以创建一个文本文件(如果还没有文本文件),并在单击“保存”按钮时在该文件中保存一些日志信息。但是我已经为我的程序(这实际上是我主项目的一小部分)创建了一个安装文件(通过cx\u freeze),当我将其安装到Windows PC上的默认安装目录(C:\program Files)中时,由于缺乏管理员权限,用户无法创建日志文件(实际上,在程序文件中也不可能以“普通Windows方式”创建文件;您需要复制并粘贴该文件)。最简单的解决方案当然是在创建程
Tkinter
应用程序,它可以创建一个文本文件(如果还没有文本文件),并在单击“保存”按钮时在该文件中保存一些日志信息。但是我已经为我的程序(这实际上是我主项目的一小部分)创建了一个安装文件(通过cx\u freeze
),当我将其安装到Windows PC上的默认安装目录(C:\program Files
)中时,由于缺乏管理员权限,用户无法创建日志文件(实际上,在程序文件
中也不可能以“普通Windows方式”创建文件;您需要复制并粘贴该文件)。最简单的解决方案当然是在创建程序设置或以管理员身份运行程序时包含日志文件。但我不想包含任何日志文件或以管理员身份运行程序。因此我很好奇是否有任何方法可以实现它。我相信Python的子进程
模块可以做一些事情,但在阅读了一些官方和非官方的文档,以及一些关于它的帖子,我仍然不知道它如何真正解决我的问题。顺便说一下,这是我的程序片段:import tkinter as tk
import subprocess
import time
class App:
def __init__(self, master):
self.master = master
self.saveBtn = tk.Button(self.master, text="Save", command=self.saveFn)
self.saveBtn.pack()
def saveFn(self):
try:
oldFile = open('log.txt', 'r')
oldFileContent = oldFile.read()
oldFile.close()
newFile = open('log.txt', 'w')
newFile.write(oldFileContent + '\n' + str(time.asctime()) + ';')
newFile.close()
except:
file = open('log.txt', 'w')
file.write(str(time.asctime()) + ';')
file.close()
root = tk.Tk()
myApp = App(root)
root.mainloop()
您不能尝试将数据保存到
程序文件
目录。所有大型操作系统都是这样:例如,您不能尝试将数据保存到Linux中的bin
文件夹
您的数据应该放在当前用户的目录中(C:\Users\YourUserName
)
要在Python中获取当前用户目录的路径(以跨平台方式),可以使用如下代码:
import os.path
path_to_users_directory = os.path.expanduser("~")
此代码将当前用户目录的路径放入path\u to\u users\u目录
变量中
在Linux下,
'C:\\Users\\YourUserName'
uder Windows和'/home/YourUserName'
。不是您想要的答案,但Windows建议使用配置文件目录来编写非敏感文件().在您的情况下,FOLDERID\u LocalAppData或FOLDERID_ProgramData@lucasg感谢您提供的信息!但是我应该如何在Python中实现它?我认为它在Windows任务调度器中可能很有用。?请看一下WinPath: