2017-10-12 2 views
0

J'essaye d'exécuter le script csh (qui crée ou met à jour les variables d'environnement) à partir de python mais les variables d'environnement ne se mettent pas à jour après retour au shell. Pourquoi? Comment puis-je le résoudre ?Les variables d'environnement ne sont pas mises à jour à partir de python

subprocess.call('script.csh',shell=True,executable="/bin/csh") 
+1

Ce n'est pas un problème Python. Les processus parents n'héritent pas de leurs enfants. Vous ne pouvez même pas le faire avec un script shell, sauf si vous "source" le script. –

+0

J'utilise tcsh. Que voulez-vous dire ? Pouvez-vous me donner une solution de contournement? @PM 2Ring – Alex

+1

La solution consiste à faire en sorte que le script shell définisse les variables d'environnement, puis à exécuter votre script Python, plutôt que de la manière dont vous essayez de le faire maintenant. Ou, vous pouvez les définir en Python en utilisant 'os.environ'. – kindall

Répondre

0

Pour définir une variable d'environnement en python, utilisez

os.environ['YOUR_VARIABLE'] = "your_value" 

Notez que les variables d'environnement doivent être des chaînes.

Explication pourquoi vous ne pouvez pas faire ce que vous voulez faire:

variables d'environnement sont définies dans un espace mémoire par processus. Quand bash (ou quel que soit le shell que vous avez) lance un programme, il utilise fork(), qui hérite des variables de bash car c'est un processus fils. Ce que vous essayez de faire est de créer un processus fils et d'avoir le parent hérite de l'enfant, comme dit @PM 2Ring.