如何在python中获取用户桌面路径,而不受语言安装(linux)的影响

时间:2012-12-06 10:42:01

标签: python linux path desktop

我找到了几个问题和答案“我如何找到用户桌面的路径”,但在我看来,它们都已经不存在了(我至少找到了)。原因是,如果用户安装的Linux不是英语,那么他或她可能会在~/Desktop之外的某个地方安装桌面。例如。对于瑞典语,我相信它在~/Skrivbord。谁知道用户决定放置他或她的桌面的位置?

由于这个原因,以下将不会(或其任何变体):

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

所以问题是:

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

2 个答案:

答案 0 :(得分:1)

您可以调用~/.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更改为例如获取该文件夹的文件。

答案 1 :(得分: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

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