python os.path.expanduser() 这总是正确的吗

Jas*_*ase 2 python windows macos python-2.7

解决方案:正如托马斯在下面指出的,我所承担的任务几乎是不可能实现的,并且数据必须是动态确定的,因为任何操作系统使用的模板结构都可以相当容易地被覆盖,而且永远没有办法以保证预先构建的模板能够正确应用。我感谢所有回复的人(即使我一开始就太笨了......):-P

我目前无法访问基于 Mac 或 Windows 的计算机,并且我正在开发一个跨平台项目(Win/Lin/Mac)。

在 Linux 上,从调用返回

os.path.expanduser('~')
Run Code Online (Sandbox Code Playgroud)

回报/home/<user>

现在,在任何操作系统中,$home 目录结构都包含所有路径共有的最后一个点(在我的 Linux 安装中,主路径是/home/<user>默认的,这是/home最后一个公共点)。

所以我的问题(目前我无法简单地测试)是这样的:在Windows和Mac上,除非进行一些不寻常的重新配置(软件产品适用于普通家庭用户和青少年),否则返回路径的最后部分始终是第一个非-公共路径部分?

(这个问题可以说得更清楚,但我对如何解释这一点感到困惑。这是重写三。)

编辑:阅读下面评论中 phihag 链接的文章后,我认为他要求更好地澄清我的预期用途(不可能的规范事情)。我想做的是确定返回的部分os.path.expanduser('~'),我可以将其转换为新相对路径定义的第一部分,然后我可以从中创建更多目录结构,这些目录结构是针对每个用户的应用程序的。相当于/home/<user>/.config/<MyAppHere>\Documents and Settings\<user>\Application Data\Roaming\<MyAppHere>。我的最终结果将使用(如果可以确定这个问题符合我的意图)以下内容:

# Assumes linux system and home path of /home/<user
head, tail = os.path.split(os.path.expanduser('~'))
userConfigPath = os.path.join(tail,'.config',MYAPPNAME)

# userConfigPath then gets written to a config file which is used by the program
# to determine where (within a greater structure) to look for a user based
# configuration which expands or overrides system configuration options.
Run Code Online (Sandbox Code Playgroud)

编辑:与 Thomas Orozco 交换信息后(如下):在软件执行的这个阶段,它不知道在哪里寻找自定义用户配置。从配置文件中读取的不是绝对地址,而是如何为配置文件构建绝对地址的模板。

该软件与视频游戏相关,其目标用户群是在标准家用计算机上工作的青少年或成年人。这些用户中的大多数不使用特殊的配置选项,例如自定义主用户目录位置。这部分代码适用于任何操作系统的所谓规范,并且忽略了对相关操作系统进行自定义的可能性。虽然以编程方式是不好的做法,但这是我目前所坚持的。

Tho*_*zco 5

在 Linux 上甚至不是这样。看看/etc/adduser.conf

  • GROUPHOMES=yes让我们adduser建造这样的房屋:/home/groupname/user.
  • LETTERHOMES=yes会创建如下所示的/home/u/user

这只是默认设置。您可以把自己安置在任何您喜欢的地方。


关于您想要实现的目标,为什么以下内容不合适?

from os.path import join, expanduser
join(expanduser('~'), '.config') # You could have something more funky if you want to. 
Run Code Online (Sandbox Code Playgroud)

然后,只需在应用程序运行时动态计算此路径,无需将其硬编码到您的应用程序中。

  • @Jase 您的模板必须提供主目录的完整路径,而不仅仅是用户名。 (2认同)