web-dev-qa-db-fra.com

Lecture et écriture de variables d’environnement en Python?

Duplicate possible:
Comment définir des variables d'environnement en Python

Mon script python qui appelle de nombreuses fonctions python et scripts Shell. Je souhaite définir une variable d'environnement dans Python (fonction d'appel principale) et dans tous les processus filles, y compris les scripts Shell, pour afficher l'ensemble des variables d'environnement.

Je dois définir certaines variables environnementales comme ceci:

DEBUSSY 1
FSDB 1

1 est un nombre, pas une chaîne. De plus, comment puis-je lire la valeur stockée dans une variable d'environnement? (Comme DEBUSSY/FSDB dans un autre script enfant python.)

141
user749632

Essayez d’utiliser le module os.

import os

os.environ['DEBUSSY'] = '1'
os.environ['FSDB'] = '1'

# Open child processes via os.system(), popen() or fork() and execv()

someVariable = int(os.environ['DEBUSSY'])

Voir le Python docs sur os.environ. De plus, pour générer des processus enfants, consultez la documentation sous-processus docs de Python.

283
voithos

La première chose à faire en premier :) la lecture de livres est une excellente approche de la résolution de problèmes; c'est la différence entre les solutions de secours et les investissements à long terme dans la résolution des problèmes. Ne manquez jamais une occasion d'apprendre. :RÉ

Vous pouvez choisir pour interpréter le 1 comme un nombre, mais les variables d'environnement ne sont pas gênantes. Ils ne font que passer des cordes:

   The argument envp is an array of character pointers to null-
   terminated strings. These strings shall constitute the
   environment for the new process image. The envp array is
   terminated by a null pointer.

(De environ(3posix).)

Vous accédez aux variables d’environnement dans python à l’aide de os.environ objet de type dictionnaire :

>>> import os
>>> os.environ["HOME"]
'/home/sarnold'
>>> os.environ["PATH"]
'/home/sarnold/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games'
>>> os.environ["PATH"] = os.environ["PATH"] + ":/silly/"
>>> os.environ["PATH"]
'/home/sarnold/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/silly/'
35
sarnold

Si vous souhaitez passer des variables globales dans de nouveaux scripts, vous pouvez créer un fichier python uniquement destiné à contenir des variables globales (par exemple, globals.py). Lorsque vous importez ce fichier en haut du script enfant, il doit avoir accès à toutes ces variables.

Si vous écrivez à ces variables, alors c'est une autre histoire. Cela implique la concurrence et le verrouillage des variables, ce que je ne vais pas aborder à moins que vous ne le souhaitiez.

3
systemizer

Utilisez os.environ[str(DEBUSSY)] pour la lecture et l’écriture ( http://docs.python.org/library/os.html#os.environ ).

Pour ce qui est de la lecture, vous devez bien sûr analyser le numéro de la chaîne.

1
piro