5

我找到了几个关于“如何找到用户桌面的路径”的问题和答案,但在我看来,它们都已失效(至少我找到了这些)。原因是如果用户安装了非英语的 Linux,他或她很可能在~/Desktop. 例如瑞典语,我相信它是在~/Skrivbord. 谁知道用户决定将他或她的桌面放在哪里?

出于这个原因,以下内容将不起作用(或它的任何变体):

os.sep.join((os.path.expanduser("~"), "Desktop"))

所以问题是:

在 linux 上,如何在 python 中获取用户桌面的真实路径而不预先假定英文默认目录结构?

4

2 回答 2

6

~/.config/user-dirs.dirs您可以调用该xdg-user-dir实用程序,而不是直接从文件中读取:

import subprocess
subprocess.check_output(['xdg-user-dir', 'DESKTOP'])

这将适用于任何具有遵循 freedesktop 规范的 DE 的 Linux 发行版,这意味着:KDE、Gnome、XFCE 等等(就像 OP 已经发布的解决方案一样)。

编辑:

更新了subprocess.check_output因为参数需要在列表中。还值得指出的是,您可以将 DESKTOP 更改为例如 DOCUMENTS 以获取该文件夹。

于 2012-12-06T22:29:18.910 回答
0

使用上面@JoachimPileborg 的链接:freedesktop.org/wiki/Software/xdg-user-dirs,我将这段代码放在一起,如果可以确定它应该安全地给出用户桌面的路径:

import os, re
def get_desktop_path():

    D_paths = list()

    try:

        fs = open(os.sep.join((os.path.expanduser("~"), ".config", "user-dirs.dirs")),'r')
        data = fs.read()
        fs.close()
    except:
        data = ""

    D_paths = re.findall(r'XDG_DESKTOP_DIR=\"([^\"]*)', data)

    if len(D_paths) == 1:
        D_path = D_paths[0]
        D_path = re.sub(r'\$HOME', os.path.expanduser("~"), D_path)

    else:
        D_path = os.sep.join((os.path.expanduser("~"), 'Desktop'))

    if os.path.isdir(D_path):
        return D_path
    else:
        return None

它只是尝试解析应该指定用户目录的文件,如果失败,它会尝试使用英语默认值。最后它验证目录是否存在。我承认正则表达式可能会得到改进,但我认为应该没问题。

于 2012-12-06T11:25:51.927 回答