Définir l'environnement de shell variable via un script python
J'ai quelques instrument qui nécessite variable d'environnement qui je veux mettre automatiquement à partir du code python. Alors, j'ai essayé plusieurs façons d'y arriver, mais aucun d'entre eux ont été couronnés de succès.
Voici quelques exemples:
- Je insérer le code suivant dans mon script python
import os os.system("export ENV_VAR=/some_path")
- J'ai créé script bash(env.sh) et de l'exécuter à partir de python:
#!/bin/bash export ENV_VAR=some_path #call it from python os.system("source env.sh")
- J'ai aussi essayé os.putenv() et os.environ["ENV_VAR"] = "some_path"
Est-il possible de définir(à l'exportation) de la variable d'environnement à l'aide de python, j'.e
sans exporter directement à shell?
Est de cet "instrument" être démarré dans le script python?
Oui, c'est pour cette raison que j'ai aussi besoin de changer mon CHEMIN env var.
Tous les processus ont un bloc d'environnement, indépendamment de la langue dans laquelle ils sont écrits dans - vous n'avez pas besoin d'un shell. Environnement de blocs (par défaut) copié à partir d'un parent à son enfant lorsque vous
Oui, c'est pour cette raison que j'ai aussi besoin de changer mon CHEMIN env var.
Tous les processus ont un bloc d'environnement, indépendamment de la langue dans laquelle ils sont écrits dans - vous n'avez pas besoin d'un shell. Environnement de blocs (par défaut) copié à partir d'un parent à son enfant lorsque vous
fork()
- ils ne sont pas copiés à tout autre moment.OriginalL'auteur Sergey Asryan | 2016-08-16
Vous devez vous connecter pour publier un commentaire.
Aussi longtemps que vous commencez à "l'instrument" (un script que j'ai supposé) à partir d'un même processus, il doit travailler:
Vous ne pouvez pas modifier une variable d'environnement d'un autre processus ou un processus parent.
OriginalL'auteur Stan Prokop
Définition d'une variable d'environnement définit uniquement pour le processus en cours et tous les processus enfants, il se lance. Donc, en utilisant
os.system
fixera seulement pour la coquille qui est en cours d'exécution pour exécuter la commande que vous avez fournis. Lorsque que la commande est terminée, le shell va loin, et ainsi de la variable d'environnement. Réglage à l'aide deos.putenv
ouos.environ
a un effet similaire; les variables d'environnement sont définies pour le Python processus et des enfants de celui-ci.Je suppose que vous essayez d'avoir ces variables de l'interpréteur de commandes que vous lancez le script à partir de, ou à l'échelle mondiale. Qui ne peuvent pas travailler parce que le shell (ou autres) n'est pas un enfant de script Python dans lequel vous définissez la variable.
Vous aurez la chance de mieux définir les variables dans un script shell. Ensuite, si vous
source
ce script (pour qu'il fonctionne dans l'instance actuelle de la coquille, plutôt que dans un shell interne est exécuté), alors qu'ils restent ensemble après la fin du script.OriginalL'auteur kindall
Selon la façon dont vous exécutez votre instrument, vous pourriez être en mesure de modifier l'environnement spécifiquement pour le processus de l'enfant, sans affecter le parent. Voir la documentation de
os.spawn*e
ousubprocess.Popen
qui acceptent un argument séparé indiquant enfant environnement. Par exemple, Réinstallation de l'os.frayer la famille danssubprocess
documentation du module qui fournit à la fois des usages:OriginalL'auteur mike.dld