Comment utiliser l'exportation avec Python sous Linux
J'ai besoin de faire une exportation de ce genre dans Python :
# export MY_DATA="my_export"
J'ai essayé de faire :
# -*- python-mode -*-
# -*- coding: utf-8 -*-
import os
os.system('export MY_DATA="my_export"')
Mais quand je l'exportation de liste, "MY_DATA" s'affiche pas :
# export
Comment je peux faire un export avec Python sans enregistrer "my_export" dans un fichier ?
Vous devez vous connecter pour publier un commentaire.
Que vous voulez vraiment faire
$ python Python 2.7.10 (default, Sep 8 2015, 17:20:17) [GCC 5.1.1 20150618 (Red Hat 5.1.1-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> os.environ["MY_DATA"] = "my_export" >>> $ export | grep -c MY_DATA 0
export
est une commande qui vous donne directement sur la coque (par exemplebash
), pour le dire d'ajouter ou de modifier l'une de ses variables d'environnement. Vous ne pouvez pas changer votre coque de l'environnement de l'enfant (par exemple en Python), c'est juste pas possible.Voici ce qui se passe avec vous essayez
os.system('export MY_DATA="my_export"')
...Lorsque le fond le plus
/bin/sh
sous-processus la fin de l'exécution de votreexport ...
de la commande, puis il est mis au rebut, le long de avec l'environnement que vous avez changé.subprocess.check_output( 'export x=foo && other_people_command_depending_on_x' )
et ça ne fonctionne pas en quelque sorte -- aucune idées de ce qui s'y passe? Réglageos.environ['x'] = 'foo'
pour Python (et donc de tous ses enfants " processus) fonctionne.PATH
variable à l'aide deos.putenv
. Bien que ce ne sera pas de mise à jour de laPATH
variable du shell d'où le script python a été à l'origine appelé.Une autre façon de faire, si vous êtes pressé et n'avez pas l'esprit de la hacky-arrière-goût, est d'exécuter la sortie du script python dans votre environnement bash et d'imprimer les commandes à exécuter le réglage de l'environnement en python. Pas l'idéal, mais il peut faire le travail dans un pincement. Ce n'est pas très portable à travers les coquilles, donc YMMV.
(vous pouvez également joindre à la déclaration de backticks dans quelques coquilles `)
Pas aussi simple que cela:
Mais:
Vous pouvez essayer de l'os.environ["MY_DATA"] à la place.
Genre de hack, car il n'est pas vraiment python de faire quelque chose de spécial ici, mais si vous exécutez la commande exporter dans le même sous-shell, vous aurez probablement obtenir le résultat que vous souhaitez.
Dans l'espoir de fournir la clarté sur des cinfusion...
J'ai écrit de nombreux python <--> bash <--> elfbin toolchains et la bonne façon de le voir est de cette forme:
De chaque processus (auteur) a un état de l'environnement hérité de quel que soit invoquée. Tout changement reste lokal à ce processus. Le transfert d'un état de l'environnement est une fonction en elle-même et fonctionne dans les deux directions, chacune avec ses propres mises en garde. Le plus commun est de modifier l'environnement avant l'exécution d'un sous-processus. Pour aller vers le métal, regardez le exec() - appel en C. Il y a une variante qui prend un pointeur vers les données de l'environnement. C'est la seule réellement pris en charge le transfert de l'environnement typique des OS es.
Scripts Shell va créer un état à passer lors de l'exécution d'enfants lorsque vous faites une exportation. Sinon, il utilise juste ce qu'il a obtenu dans la première place.
Dans tous les autres cas, il sera certain mécanisme générique utilisé pour passer d'un ensemble de données pour permettre à l'appelant lui-même le processus de mise à jour de son environnement sur la base du résultat de l'enfant, les processus de production.
Ex:
La même chose peut bien sûr être fait en utilisant json, xml ou d'autres choses, aussi longtemps que vous avez les outils pour interpréter et à appliquer.
Ce besoin peut être (50% de chance) un signe de misconstruing la base de primitives et de la nécessité d'avoir une meilleure config ou le paramètre d'échange dans votre solution.....
Oh, en python, je voudrais faire quelque chose comme...
(besoin d'amélioration en fonction de votre situation)
Une solution en ligne:
Ventilation:
Python appel
C'est le lancement d'un script python qui
Eval appel
Il est en cours d'exécution dans le courant de bash exemple de la sortie du script python. Dans mon cas, son exécution:
En d'autres termes, c'est le réglage de la variable d'environnement "python_include_path" avec ce chemin pour cette instance du shell.
Inspiré par:
http://blog.tintoy.io/2017/06/exporting-environment-variables-from-python-to-bash/
J'ai une excellente réponse.
M. Alex Tingle est correct au sujet de ces processus et sous-processus fourre
Comment il peut être obtenu, c'est comme je l'ai mentionné.
Concept clé est :
printed
de python sera stockée dans la variable dans la capture de variable dansbash
[output
]eval
print
sortie de python dans un sensbash
commandeseval
pour l'exécuter en bashEt vous pouvez voir vos résultats
NOTE
Toujours exécuter le
eval
à l'aide dedouble quotes
ou d'autrebash
gâchera votre\n
s et des sorties seront étrangePS: je n'aime pas bash, mais vous avez à l'utiliser
os.système ('/home/user1/exportPath.ksh)
exportPath.ksh:
export PATH=MY_DATA="my_export"