J'ai besoin de définir certaines variables d'environnement dans le script python et je veux que tous les autres scripts appelés depuis python voient les variables d'environnement définies.
Si je fais
os.environ["DEBUSSY"] = 1`
il se plaint de dire que cela 1
doit être une chaîne.
Je veux également savoir comment lire les variables d'environnement en python (dans la dernière partie du script) une fois que je l'ai défini.
python
environment-variables
prahallada
la source
la source
Réponses:
Les variables d'environnement doivent être des chaînes, donc utilisez
pour définir la variable
DEBUSSY
sur la chaîne1
.Pour accéder à cette variable ultérieurement, utilisez simplement:
Les processus enfants héritent automatiquement des variables d'environnement du processus parent - aucune action spéciale de votre part n'est requise.
la source
putenv()
, mais pour ces Unixen, il n'y a rien que vous puissiez faire de toute façon. Même les anciennes versions d'AIX et HPUX avec lesquelles je travaillais le supportaient. Si quelqu'un est en mesure de trouver un ordinateur qui ne le prend pas en charge aujourd'hui, j'ai de sérieux doutes qu'il pourra exécuter Python sur cet ordinateur. :)Vous devrez peut-être prendre en compte d'autres aspects de la robustesse du code;
lorsque vous stockez une variable à valeur entière en tant que variable d'environnement, essayez
puis pour la récupération, considérez que pour éviter les erreurs, vous devriez essayer
éventuellement remplacer «-1» par «Non défini»
donc, pour mettre tout cela ensemble
la source
myvar = int(os.environ.get('MYVAR')) if os.environ.get('MYVAR', '') != '' else None
- de cette façon, ce serait Aucun si aucun numéro n'était fournivalue_not_set = '-1'
). Ensuite, vous pouvez utiliserdebussy = int(os.environ.get('DEBUSSY', value_not_set))
os.environ
se comporte comme un dictionnaire python, de sorte que toutes les opérations courantes du dictionnaire peuvent être effectuées. En plus des opérationsget
etset
mentionnées dans les autres réponses, nous pouvons également simplement vérifier si une clé existe. Les clés et les valeurs doivent être stockées sous forme de chaînes .Python 3
Pour python 3, les dictionnaires utilisent le mot clé in au lieu de has_key
Python 2
Il y a une chose importante à noter à propos de l'utilisation
os.environ
:Bien que les processus enfants héritent de l'environnement du processus parent, j'ai rencontré récemment un problème et j'ai compris que si vous avez d'autres scripts mettant à jour l'environnement pendant que votre script python est en cours d'exécution, appeler à
os.environ
nouveau ne reflétera pas les dernières valeurs .Extrait des documents :
os.environ.data
qui stocke toutes les variables d'environnement, est un objet dict, qui contient toutes les valeurs d'environnement:la source
os.environ.data
été renommé en Python 3.2 enos.environ._data
, le préfixe de soulignement indiquant que vous ne devriez pas le lire directement. Quoi qu'il en soit,os.environ._data
les valeurs ne seront pas mises à jour de toute façon.Alors fais
Utilisez simplement
os.environ["DEBUSSY"]
, comme dansla source
définir la variable:
Méthode d'affectation des éléments à l'aide de la clé:
pour obtenir ou vérifier son existence ou non,
puisque os.environ est une instance, vous pouvez essayer de manière objet.
Méthode 1:
obtiendra
'1'
comme valeur de retourMéthode 2:
Méthode 3:
Méthode 4:
la source
Vous devez attribuer une valeur de chaîne à la variable d'environnement.
os.environ["DEBUSSY"] = "1"
Si vous souhaitez lire ou imprimer la variable d'environnement, utilisez simplement
print os.environ["DEBUSSY"]
Ces modifications ne seront effectives que pour le processus en cours où elles ont été affectées, elles ne modifieront pas la valeur de façon permanente. Les processus enfants hériteront automatiquement de l'environnement du processus parent.
la source
set [<name>=[<value>]]
mais cela ne fait que pour le processus en cours d'exécution. Quand je ferme la cmd, elle n'existe pas et même lorsqu'elle est ouverte, d'autres programmes ne peuvent pas la voir.Et alors
os.environ["DEBUSSY"] = '1'
? Les variables d'environnement sont toujours des chaînes.la source
J'ai essayé d'ajouter des variables d'environnement. Mon objectif était de stocker des informations utilisateur sur des variables système afin que je puisse utiliser ces variables pour de futures solutions, comme alternative aux fichiers de configuration. Cependant, la méthode décrite dans le code ci-dessous ne m'a pas du tout aidé.
Ce simple bloc de code fonctionne bien, cependant, ces variables existent dans les processus respectifs de sorte que vous ne les trouverez pas dans l'onglet Variables d'environnement des paramètres système de Windows. À peu près le code ci-dessus n'a pas servi mon objectif. Ce problème est discuté ici: problème de sauvegarde des variables
Une autre tentative infructueuse. Donc, finalement, j'ai réussi à enregistrer la variable avec succès dans le registre d'environnement de fenêtre en imitant les commandes shell Windows enveloppées dans la classe système du package os. Le code suivant décrit cette tentative réussie.
J'espère que cela sera utile pour certains d'entre vous.
la source
Il convient de noter que si vous essayez de définir la variable d'environnement sur une évaluation bash, elle ne stockera pas ce que vous attendez. Exemple:
Cela ne l'évaluera pas comme dans un shell, donc au lieu de devenir
/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
un chemin, vous obtiendrez l'expression littérale$(/usr/libexec/java_home)
.Assurez-vous de l'évaluer avant de définir la variable d'environnement, comme suit:
la source
Vous pouvez utiliser le
os.environ
dictionnaire pour accéder à vos variables d'environnement.Maintenant, un problème que j'ai eu est que si j'essayais d'utiliser
os.system
pour exécuter un fichier batch qui définit vos variables d'environnement (en utilisant la commande SET dans un fichier **. Bat *), il ne les définirait pas vraiment pour votre environnement python (mais pour le processus enfant créé avec laos.system
fonction). Pour obtenir réellement les variables définies dans l'environnement python, j'utilise ce script:la source
Lorsque vous jouez avec des variables d'environnement (ajouter / modifier / supprimer des variables), une bonne pratique consiste à restaurer l'état précédent à la fin de la fonction.
Vous aurez peut-être besoin de quelque chose comme le
modified_environ
gestionnaire de contexte décrit dans cette question pour restaurer les variables d'environnement.Utilisation classique:
la source