web-dev-qa-db-fra.com

Comment obtenir les répertoires d'utilisateurs par défaut (XDG) auprès de Python?

Par exemple, en anglais, les dossiers d’utilisateur par défaut seront:

$HOME/Desktop
....
$HOME/Videos

En espagnol, les dossiers utilisateur par défaut seront:

$HOME/Escritorio
....
$HOME/Vídeos

Le fichier~/.config/user-dirs.dirs a ceux qui localisent les noms des dossiers par défaut. (Toujours?).

J'ai besoin d'obtenir ces noms d'un script python. J'aimerais ne pas analyser ce fichier. Y a-t-il une autre manière élégante? J'ai trouvé this :

from xdg.BaseDirectory import *
print xdg_cache_home
print xdg_config_dirs
print xdg_config_home
print xdg_data_dirs
print xdg_data_home

Mais il ne renvoie pas ces dossiers.

Merci d'avance!

5
Costales

Si cela ne vous dérange pas d’obtenir une dépendance sur GLib ou si vous utilisez déjà GTK en tant que boîte à outils, vous pouvez utiliser la méthode GLib.get_user_special_dir() .

>>> from gi.repository import GLib
>>> GLib.get_user_special_dir(GLib.USER_DIRECTORY_PICTURES)
'/home/timo/Afbeeldingen'
>>> GLib.get_user_special_dir(GLib.USER_DIRECTORY_DOCUMENTS)
'/home/timo/Documenten'
>>> GLib.get_user_special_dir(GLib.USER_DIRECTORY_DOWNLOAD)
'/home/timo/Downloads'

Tous les disponibles répertoires:

G_USER_DIRECTORY_DESKTOP         the user's Desktop directory
G_USER_DIRECTORY_DOCUMENTS       the user's Documents directory
G_USER_DIRECTORY_DOWNLOAD        the user's Downloads directory
G_USER_DIRECTORY_MUSIC           the user's Music directory
G_USER_DIRECTORY_PICTURES        the user's Pictures directory
G_USER_DIRECTORY_PUBLIC_SHARE    the user's shared directory
G_USER_DIRECTORY_TEMPLATES       the user's Templates directory
G_USER_DIRECTORY_VIDEOS          the user's Movies directory
G_USER_N_DIRECTORIES             the number of enum values

Si vous obtenez ce message d'erreur:

ImportError: lorsque vous utilisez gi.repository, vous ne devez pas importer de modules statiques tels que "gobject". Veuillez remplacer toutes les occurrences de "import gobject" par "de gi.repository import GObject".

Vous devez utiliser ceci:

import glib
return glib.get_user_special_dir(glib.USER_DIRECTORY_PICTURES)
4
Timo

Installez la bibliothèque python pour accéder aux normes freedesktop.org

Pour obtenir les répertoires XDG à partir de Python, vous devez installer (en fonction de votre version python) un des packages suivants:

Pour Python 2.x

Sudo apt-get install python-xdg

Pour Python 3:

Sudo apt-get install python3-xdg 

Répertoires XDG

  • $XDG_DATA_HOME définit le répertoire de base par rapport auquel les fichiers de données spécifiques à l'utilisateur doivent être stockés. Si $XDG_DATA_HOME n'est pas défini ou est vide, une valeur par défaut égale à $HOME/.local/share doit être utilisée.

  • $XDG_CONFIG_HOME définit le répertoire de base par rapport auquel les fichiers de configuration spécifiques à l'utilisateur doivent être stockés. Si $XDG_CONFIG_HOME n'est pas défini ou est vide, une valeur par défaut égale à $HOME/.config doit être utilisée.

  • $XDG_DATA_DIRS définit l'ensemble de répertoires de base classés par ordre de préférence pour la recherche de fichiers de données en plus du répertoire de base $XDG_DATA_HOME. Les répertoires dans $XDG_DATA_DIRS doivent être séparés par un signe deux-points ':'.

    Si $XDG_DATA_DIRS n'est pas défini ou est vide, une valeur égale à /usr/local/share/:/usr/share/ doit être utilisée.

  • $XDG_CONFIG_DIRS définit l'ensemble de répertoires de base classés par ordre de préférence pour la recherche de fichiers de configuration en plus du répertoire de base $XDG_CONFIG_HOME. Les répertoires de $XDG_CONFIG_DIRS doivent être séparés par un deux-points ':'.

    Si $XDG_CONFIG_DIRS n'est pas défini ou est vide, une valeur égale à /etc/xdg doit être utilisée.

Source: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

UPDATE: Comment accéder aux annuaires d'utilisateurs XDG spécifiques à Ubuntu:

Le fichier ~/.config/user-dirs.dirs contiendra toujours les noms de localisation car l'outil xdg-user-dirs-update contrôle ce fichier, voir la section consacrée à la page de manuel:

   The XDG user dirs configuration is stored in the user-dirs.dir
   file in the location pointed to by the XDG_CONFIG_HOME
   environment variable.

Le code python suivant vous permettra d'analyser le ~/.config/user-dirs.dirs.

#!/usr/bin/env python

import io
import os
import re
import ConfigParser

from xdg.BaseDirectory import xdg_config_home

config = ConfigParser.RawConfigParser(allow_no_value=True)

f = open(os.path.join(xdg_config_home, "user-dirs.dirs"))
user_config = "[XDG_USER_DIR]\n" + f.read()
f.close()
user_config = re.sub('\$HOME', os.path.expanduser("~"), user_config)
user_config = re.sub('"', '', user_config)

config.readfp(io.BytesIO(user_config))
print config.get("XDG_USER_DIR", "XDG_PICTURES_DIR")
4
Sylvain Pineau