什么是Python 3的操作系统命令,建立“写入数据文件和C-驱动器路径”为典型的Windows 10应用程序

问题描述:

什么是Python 3的操作系统命令,建立“写入数据文件和C-驱动器路径”的一个典型Windows 10应用程序。这个问题有几个部分:什么是Python 3的操作系统命令,建立“写入数据文件和C-驱动器路径”为典型的Windows 10应用程序

  1. 我的Python 3程序创建(多个)数据文件作为其目的的一部分。当我的MSI安装程序安装到/ Programs中时,我的Python可执行文件无权创建和写入数据文件。因此,我的问题的第一部分是:我需要改变我的Python 3程序中的特定目录中创建数据文件(使用操作系统功能),你可以给我一个例子。

  2. 我的问题的第二部分很简单:什么os命令选项可以帮助我发现一般的Windows 10 PC的Windows 10目录(例如主路径,AppData路径等)。

  3. 注意,我cx_Freezing到MSI安装,所以一切必须对于典型的自动化远离云安装(谷歌驱动器或GitHub的)由MSI安装,所以回答1和2的上方时记住这一点。

注意:这里是MSI安装该程序: 新的Windows 10联系人管理应用程序。

https://drive.google.com/drive/folders/0Bz98wvqqw-1QRUNFcUJLU21yT1k

预先感谢您的编程知识和经验。

我很欣赏你的技术援助和澄清。

我建议您避免将文件和目录直接存储在用户的配置文件文件夹(即UserProfile环境变量)或主文件夹(即"%HomeDrive%%HomePath%")中。这不同于在Unix上常见的做法主目录(如果我们忽略XDG基目录规范),但是当在雷蒙德,做作为Microsofties做。

在以下一个或多个位置为应用程序创建一个唯一命名的文件夹:本地数据文件夹(每个用户),漫游数据文件夹(每个用户)或程序数据文件夹(每个用户)机)。请注意,这些文件夹默认情况下处于隐藏状态,因为通常用户并不打算直接访问它们。

使用本地数据文件夹缓存。使用漫游数据文件夹进行有状态的用户数据和配置。将程序数据文件夹用于不特定于用户的数据和高速缓存。例如,像pip这样的程序可以使用程序数据文件夹来缓存下载的软件包。 (实际上,每个用户的点缓存包,但原则上它可以缓存每台机器。)

如果您的应用程序使用程序数据文件夹,请确保该文件夹授予所有用户添加和修改子文件夹和文件的权限。如果您懒懒地创建文件夹,则可以手动添加权限。对于如何修改文件安全的示例见this answer

本地,漫游和程序数据文件夹的环境变量分别为LocalAppData,AppDataProgramData。在Windows XP中,后者是"%AllUsersProfile%\Application Data",并且可能“应用程序数据”已本地化。通常,您不应该在应用程序中使用这些环境变量。

由于大多数已知/特殊文件夹在资源管理器中轻松地重定位,最好通过调用SHGetFolderPath或较新的SHGetKnownFolderPath功能,而不是使用环境变量和默认位置,要求电流通路的外壳。如果你需要留在Python的标准库中,你可以使用ctypes。但使用PyWin32更容易,可以将pip安装为“pypiwin32”包。

下面是数据,文档和媒体文件的一些Known Folder的GUID:

  User     System 
ProgramData       FOLDERID_ProgramData 
Local  FOLDERID_LocalAppData 
Roaming  FOLDERID_RoamingAppData 
Desktop  FOLDERID_Desktop  FOLDERID_PublicDesktop 
Documents FOLDERID_Documents  FOLDERID_PublicDocuments 
Downloads FOLDERID_Downloads  FOLDERID_PublicDownloads 
Music  FOLDERID_Music   FOLDERID_PublicMusic 
Pictures FOLDERID_Pictures  FOLDERID_PublicPictures 
Videos  FOLDERID_Videos   FOLDERID_PublicVideos 

这里有相应的CSIDL常量,但没有一个 “下载”:

  User     System 
ProgramData       CSIDL_COMMON_APPDATA 
Local  CSIDL_LOCAL_APPDATA 
Roaming  CSIDL_APPDATA 
Desktop  CSIDL_DESKTOP   CSIDL_COMMON_DESKTOPDIRECTORY 
Documents CSIDL_PERSONAL   CSIDL_COMMON_DOCUMENTS 
Music  CSIDL_MYMUSIC   CSIDL_COMMON_MUSIC 
Pictures CSIDL_MYPICTURES  CSIDL_COMMON_PICTURES 
Videos  CSIDL_MYVIDEO   CSIDL_COMMON_VIDEO 

PyWin32不包含SHGetKnownFolderPath。我有another answer,通过ctypes调用它。或者,您可以使用PyWin32创建KnownFolderManager实例。例如:

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() 

或致电与CSIDL不变的传统SHGetFolderPath功能。例如:

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) 
+0

我真的很感谢这个详细的答案eryksun。这个答案对许多Windows 10 Python 3开发人员非常有用。 *是一个很好的解决方案来源,尤其是对于像Windows 10这样的公共平台上学习基础知识的开发人员而言。 –