我找到了几个问题和答案“我如何找到用户桌面的路径”,但在我看来,它们都已经不存在了(我至少找到了)。原因是,如果用户安装的Linux不是英语,那么他或她可能会在~/Desktop
之外的某个地方安装桌面。例如。对于瑞典语,我相信它在~/Skrivbord
。谁知道用户决定放置他或她的桌面的位置?
由于这个原因,以下将不会(或其任何变体):
os.sep.join((os.path.expanduser("~"), "Desktop"))
所以问题是:
在linux上,我如何在python中获取用户桌面的真实路径而不预先假定英文默认目录结构?
答案 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
它只是尝试解析应该指定用户目录的文件,如果失败则尝试使用英语默认值。最后,它验证该目录是否存在。我承认正则表达式可能会得到改进,但我认为应该没问题。