17 votes

Python os.environ["HOME"] fonctionne au repos mais pas dans un script.

Je travaille sur un simple script en Python (2.7.3), mais je dois récupérer le dossier personnel de l'utilisateur. J'ai essayé :

import os
home_folder = os.environ["HOME"]

Et cela fonctionne bien lorsque j'exécute ce code en mode IDLE, mais si je le lance à partir de la commande cmd, je reçois un message : «KeyError: 'HOME'»

Quelqu'un peut-il me dire pourquoi ? Comment puis-je résoudre ce problème ?

32voto

Nathan Points 798

Windows utilise USERPROFILE au lieu de HOME . Windows n'a pas HOME et d'autres systèmes d'exploitation n'ont pas USERPROFILE L'utilisation de l'un ou l'autre de ces éléments réduit donc l'indépendance de la plate-forme.

Pour conserver l'indépendance de la plate-forme, vous pouvez utiliser expanduser de os.path comme suit :

import os.path
home_folder = os.path.expanduser('~')

Par ailleurs, vous pouvez utiliser print(os.environ) pour voir toutes les variables d'environnement auxquelles vous avez accès, ce qui montre que IDLE a des extras.

6voto

nachouve Points 1029

Windows n'a pas de variable d'environnement HOME. Il utilise USERPROFILE à la place. Pour résoudre ce problème, vous pouvez définir une nouvelle variable "HOME" en tapant sur votre console :

set HOME=%USERPROFILE%

en tant que copie de la variable USERPROFILE.

Vous pouvez vérifier qu'il s'agit d'une frappe identique :

echo %USERPROFILE%
echo %HOME%

Cela fonctionnera pour la session en cours.

1voto

Matt Erickson Points 403

On dirait que vous essayez d'exécuter ce programme sous Windows en vous basant uniquement sur le fait que vous l'avez "lancé à partir de la commande". IDLE vous donne cette possibilité par commodité ; sous Windows, utilisez USERPROFILE au lieu de HOME . Les %USERPROFILE% envar est le logiciel Win32 $HOME .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X