跨平台桌面目录路径?

Posted

技术标签:

【中文标题】跨平台桌面目录路径?【英文标题】:Cross-platform Desktop directory path? 【发布时间】:2011-11-16 06:19:50 【问题描述】:

有没有办法以跨平台的方式获取桌面目录路径,最好只使用标准模块,在 Python 中?

我目前的 Mac OS X + Windows 解决方案是使用sys.platform 检查哪个系统正在运行 Python,然后执行以下操作:

Mac OS X 可以使用os.path.join(os.path.expanduser('~'), 'Desktop') 处理。 Windows可以使用非标准模块win32com,或者ctypes依赖模块winpaths;有标准的替代品吗? 那么 Linux 呢?

我会对适用于 Mac OS X、Windows 和 Linux 的解决方案感到满意。

【问题讨论】:

它们是不同的操作系统。微不足道的答案几乎普遍都是“否”,没有适用于这两个操作系统系列的标准。 Windows 是非标准的。您是否在寻求一种将差异最小化的方法?请发布您正在使用的代码,以便我们可以 - 也许 - 简化它。 让我们continue this discussion in chat 【参考方案1】:

在windows下面,用户的home是%HOMEPATH%,相当于linux和Mac的~。在此下方,有一个文件夹 Desktop,就像在 Mac 上一样。 Python 在 Windows 上自动将 ~ 转换为 %HOMEPATH%,因此您的 Mac 命令将在 Mac 和 Windows 上开箱即用。

在 Linux 上,这有点棘手。首先,了解您正在运行的 Linux 机器可能没有桌面,因此没有用户桌面文件夹。如果你有窗口管理器,它可能会也可能不会遵循~\Desktop 范式。 The wikipedia entry on window managers 更详细,包括一些子链接中几个更流行的 X 窗口管理器之间的比较。

最好的办法是退后一步,问问自己我为什么想要/需要用户桌​​面文件夹?是在安装过程中创建快捷方式吗?使用安装编写器实用程序(例如 nsis)处理这些细节可能会更好。如果是用于文件存储,即使是临时的,您可能需要重新考虑您的设计。或者您是否正在寻找一些东西,在这种情况下,文件系统搜索可能是一种方法,而不是脆弱的单个文件夹检查。

像大多数事情一样,这一切都取决于你想要完成什么。

正如 EOL 在他的评论中指出的那样,Windows 比最初看起来要复杂一些。 His link to a more complete article on the Windows Desktop 文件夹包含有关桌面文件夹本地化的更多详细信息。对于国际应用程序的构建者来说,考虑到这一点非常重要,要么使用内置于其工具集中的自动本地化,要么避免使用它。

【讨论】:

感谢 Linux 上的 cmets。至于 Windows,它有时确实将桌面置于本地化目录名称 (bytes.com/topic/python/answers/…) 下,所以看起来 win2com 方法更好,不是吗? 我对桌面路径感兴趣,因为 (1) 用户运行创建许多输出文件的程序(从 USB 密钥)。这些文件不应转到 USB 密钥,因为用户可能无法保留密钥。 (2) 这些输出文件也应该对用户很容易“可见”,以便他很容易找到它们,这就是桌面的想法。 @EOL 感谢您的链接,我不知道这一点。对于输出,告诉用户您将文件放在哪里和/或打开资源管理器窗口以显示目录不是更简单吗?理想情况下,我们应该创建一个新的子文件夹,以避免将新文件混入他们的文件中,以防他们想轻松删除它们。 是的,这些程序确实创建了一个公共输出目录,以避免将它们的输出与用户的文件混合。不幸的是,打开资源管理器窗口并不实用,因为用户多次运行多个程序,而且他们无法承受每次都弹出一个窗口。 :) 不过,感谢您分享想法。 :) @EOL 没问题,虽然我只是被一个想法打动了。如果用户必须从 USB 密钥运行它,那么他们知道程序何时运行。大概是因为完成后的消息,或者是受过教育的用户群,他们也会知道他们需要对输出文件做一些事情。如果他们实际上并不需要它们,也许输出目录应该更像是一个长期存储的东西?【参考方案2】:

我使用了以下内容:

import os
desktop_file = os.path.expanduser("~/Desktop/myfile.txt")

在 Unix 和 Windows 上,返回带有初始组件的参数 ~ 或 ~user 替换为该用户的主目录。

参考:os.path.expanduser

【讨论】:

这个答案实际上返回了PYTHON DEFAULT PATH ENVIRONMENT,它对我不起作用。

以上是关于跨平台桌面目录路径?的主要内容,如果未能解决你的问题,请参考以下文章

检查路径上的对象是不是是跨平台的文件或目录?

Web前端项目的跨平台桌面客户端打包方案之——CEF框架

Web前端项目的跨平台桌面客户端打包方案之——CEF框架

如何在 Python 的不同平台上创建相同的目录路径?

python平台跨平台开发

小黄条:能嵌入桌面的跨平台todolist