Ich möchte ein Programm (in diesem Fall Python) nur mit den in einer Datei definierten Umgebungsvariablen ausführen, z. B vars.env
.:
FOO=bar
X=12
Hier ist ein einfaches Python-Skript, das die Umgebung druckt:
import os
print os.environ
Wenn ich laufe env -i python script.py
, ist os.environ wie erwartet leer. Ebenso, wenn ich renne
$ env -i FOO=bar X=12 python env.py
Ich bekomme
env: {'X': '12', 'FOO': 'bar'}
Ich möchte jedoch die Umgebung aus meiner vars.env
Datei laden, wenn ich das Skript ausführe. Wie kann ich das erreichen?
EDIT: Eine Sache, die ich tun könnte, ist diese env-Datei zu katzen, env -i `cat vars.env` python env.py
aber ich würde es vorziehen, sie auf irgendeine Weise beschaffen zu können.
bash
environment-variables
mdkess
quelle
quelle
/path/to/myscript.py
?Antworten:
In Anbetracht der angezeigten Datei sollten Sie in der Lage sein:
Wenn es nicht funktioniert, müssen Sie zuerst Ihre Umgebungsdatei formatieren. Hier ist ein Beispiel:
Ich dachte zuerst, Sie könnten es über die Shell tun - aber es wird wahrscheinlich eine eigene Umgebung festlegen, bevor Sie Ihr Programm aufrufen. Aber ich kann zumindest zeigen, dass die Argumente richtig zugeordnet sind:
Wenn Sie es dennoch lieber als Quelle verwenden möchten, können Sie die Shell folgendermaßen verwenden:
Beachten Sie, dass ich das
$IFS
Zeug entfernt habe - das ist auf diese Weise nicht notwendig -, aber ich musste mich über die Anführungszeichen in der Datei informieren. Hier bin ich im Wesentlichen.dot
Sourcingstdin
- Lesen der|pipe
als Eingabe - aber Sie können jede Datei verwenden. Ich benutzeset -a
vor dem Lesen der Eingabedatei, um die--allexport
Option festzulegen.Das ist ein Ergebnis der Verwendung von
bash
'ssh
- es fügt hinzu$PWD
,$SHLVL
und$_
. Damit istdash
es etwas besser. Außerdem werdendash
keine Exporte hinzugefügt, sodass Sie den-a
Parameter in der Befehlszeile angeben können :Nur
$PWD
kommt durch.quelle
Sie können alles tun in
Python
:Dann:
quelle
Eine andere Möglichkeit wäre, die Datei in ein Array einzulesen und das Array dann als Argument zu verwenden. Der Vorteil gegenüber der Verwendung der Prozesssubstitution besteht darin, dass Werte mit Leerzeichen verarbeitet werden können. Beispiel:
quelle