什么是Python 3 os命令来建立;“可写数据文件和C驱动器路径”;对于典型的Windows 10应用程序
为典型的Windows 10应用程序建立“可写数据文件和C驱动器路径”的Python 3 os命令有哪些。这个问题有几个部分:什么是Python 3 os命令来建立;“可写数据文件和C驱动器路径”;对于典型的Windows 10应用程序,windows,python-3.x,filesystems,windows-installer,Windows,Python 3.x,Filesystems,Windows Installer,为典型的Windows 10应用程序建立“可写数据文件和C驱动器路径”的Python 3 os命令有哪些。这个问题有几个部分: 我的Python3程序创建(多个)数据文件作为其用途的一部分。当我的MSI安装程序安装到/程序中时,我的Python可执行文件没有创建和写入数据文件的权限。因此,我问题的第一部分是:我是否需要更改Python3程序以在特定目录中创建数据文件(使用操作系统功能),您能给我举个例子吗 我问题的第二部分很简单:什么操作系统命令选项可以帮助我发现普通windows 10 PC的
感谢您的技术帮助和澄清。我建议您避免将文件和目录直接存储在用户配置文件文件夹(即
UserProfile
环境变量)或主文件夹(即%HomeDrive%%HomePath%”
)中。这不同于Unix中主目录的常见做法(如果我们忽略XDG基本目录规范),但在Redmond中,请按照Microsofties的操作
在以下一个或多个位置为应用程序创建唯一命名的文件夹:本地数据文件夹(每用户)、漫游数据文件夹(每用户)或程序数据文件夹(每台计算机)。请注意,这些文件夹在默认情况下是隐藏的,因为通常用户不打算直接访问它们
使用本地数据文件夹进行缓存。将漫游数据文件夹用于有状态用户数据和配置。将程序数据文件夹用于非特定于用户的数据和缓存。例如,像pip这样的程序可以使用ProgramData文件夹来缓存下载的包。(实际上,pip为每个用户缓存包,但原则上它可以为每台机器缓存包。)
如果应用程序使用程序数据文件夹,请确保该文件夹授予所有用户添加和修改子文件夹和文件的权限。如果延迟创建文件夹,则可以手动添加权限。有关如何修改文件安全性的示例,请参见
本地、漫游和程序数据文件夹的环境变量分别为LocalAppData
、AppData
和ProgramData
。在Windows XP中,后者是“%AllUsersProfile%\Application Data”
,可能“Application Data”是本地化的。通常,您不应该在应用程序中使用这些环境变量
由于大多数已知/特殊文件夹都可以在资源管理器中轻松重新定位,因此最好通过调用SHGetFolderPath
或更新的shGetKnowlderPath
函数,而不是使用环境变量和默认位置,向shell询问当前路径。如果需要保持在Python的标准库中,可以使用ctypes来实现这一点。但是使用PyWin32更容易,它可以作为“pypiwin32”包安装在pip上
以下是一些用于数据、文档和媒体文件的GUI:
用户系统
ProgramData FOLDERID_ProgramData
本地FOLDERID\u LocalAppData
漫游FOLDERID\u漫游应用数据
桌面文件夹\u桌面文件夹\u公共桌面
文档FOLDERID_文档FOLDERID_公共文档
下载FOLDERID_下载FOLDERID_公开下载
音乐民俗音乐民俗公共音乐
图片FOLDERID_图片FOLDERID_公共图片
视频FOLDERID_视频FOLDERID_公共视频
以下是相应的CSIDL
常量,除了没有用于“下载”的常量外:
用户系统
ProgramData CSIDL_COMMON_APPDATA
本地CSIDL\u本地\u应用数据
漫游CSIDL_应用数据
桌面CSIDL\u桌面CSIDL\u公用桌面目录
文档CSIDL\u个人CSIDL\u通用文档
音乐CSIDL\u我的音乐CSIDL\u普通音乐
图片CSIDL\u MYPICTURES CSIDL\u COMMON\u图片
视频CSIDL_MYVIDEO CSIDL_COMMON_视频
SHGetKnownFolderPath
未被PyWin32包装。我通过ctypes调用它。或者,您可以使用PyWin32创建实例。例如:
import pythoncom
from win32com.shell import shell
kf_mgr = pythoncom.CoCreateInstance(shell.CLSID_KnownFolderManager, None,
pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IKnownFolderManager)
downloads_path = kf_mgr.GetFolder(shell.FOLDERID_Downloads).GetPath()
from win32com.shell import shell, shellcon
SHGFP_TYPE_CURRENT = 0
SHGFP_TYPE_DEFAULT = 1
local_data_path = shell.SHGetFolderPath(None, shellcon.CSIDL_LOCAL_APPDATA,
None, SHGFP_TYPE_CURRENT)
或者使用CSIDL
常量调用传统的SHGetFolderPath
函数。例如:
import pythoncom
from win32com.shell import shell
kf_mgr = pythoncom.CoCreateInstance(shell.CLSID_KnownFolderManager, None,
pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IKnownFolderManager)
downloads_path = kf_mgr.GetFolder(shell.FOLDERID_Downloads).GetPath()
from win32com.shell import shell, shellcon
SHGFP_TYPE_CURRENT = 0
SHGFP_TYPE_DEFAULT = 1
local_data_path = shell.SHGetFolderPath(None, shellcon.CSIDL_LOCAL_APPDATA,
None, SHGFP_TYPE_CURRENT)
我真的很感激这个详细的回答。这个答案将对许多Windows10Python3开发人员非常有帮助。Stackoverflow是一个很好的解决方案来源,特别是对于在Windows 10等通用平台上学习基础知识的开发人员来说。