python os.path.expanduser()这总是如此

时间:2012-12-31 14:32:24

标签: python windows macos python-2.7

解决方案:正如托马斯在下面指出的那样,我已经完成的任务几乎无法实现,并且数据必须在运行中确定,因为任何操作系统使用的模板结构都可以相当容易地被覆盖,并且绝不能保证可以正确应用预先构建的模板。我要感谢所有回复的人(即使我是为了得到它而密集起来......):-P

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

在linux上从调用返回

os.path.expanduser('~')

返回/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.

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

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

1 个答案:

答案 0 :(得分:4)

在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. 

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