2012-04-06 9 views
0

ich eine Datei haben (myenv.sh) mit folgendem InhaltPython und die Umwelt

export MYVAR="HELLO" 

Und dann habe ich mein Programm (myhugeprogram.py):

#!/usr/bin/env python 
import os 
print os.environ['MYVAR'] 

Welche ausführbar ist: chmod 755 myhugeprogram.py

Jetzt quelle ich meine Umgebung: source myenv.sh

Und mein Programm laufen:

./myhugeprogram.py 
HELLO 

Wie erwartet. Jetzt habe ich es nicht interaktiv über SSH ausführen:

[email protected]:~$ ssh [email protected] ./myhugeprogram.py 
Traceback (most recent call last): 
    File "./myhugeprogram.py", line 3, in <module> 
    print os.environ['MYVAR'] 
    File "/usr/lib/python2.5/UserDict.py", line 22, in __getitem__ 
    raise KeyError(key) 
KeyError: 'MYVAR' 

was normal ist, weil ich nicht myenv.sh bezogen haben. Jetzt die Frage:

Wie erstelle ich eine Bash-Datei, die einige Umgebungsvariablen setzt, bevor ich mein Python-Skript ausführe, wenn ich nicht-interaktiv über SSH laufe?

Antwort

3

Zwei Möglichkeiten, die ich mir vorstellen kann:

  • umfassen die Quelle-Befehl in der ssh-Befehl Sie ausführen, zum Beispiel

    ssh [email protected] "source myenv.sh; ./myhugeprogram.py" 
    
  • die Umgebungsvariable in Ihrer .bashrc-Datei festgelegt.

0

Schreiben Sie einen Shell-Skript-Wrapper (sichtbar in beiden Umgebungen), der die Umgebung festlegt und das Programm zusammen mit allen Argumenten zusammen aufruft. Sie könnten dieses Shell-Skript intelligent machen, so dass es nur die Umgebung basierend auf der aktuellen Umgebung festlegt, so dass Sie dieses Wrapper-Skript immer aufrufen müssen, unabhängig von Ihrem Kontext, und es wie eine Blackbox behandeln kann.

0

sollten Sie die Variable in Ihrem Skript exportieren/Quelle selbst,

da, wenn Sie eine Sitzung von SSH und Feuerquelle Befehl öffnen, dann eine weitere Sitzung für die Ausführung des Skripts verwenden,

die Umgebungsvariable wird nicht verfügbar sein, da die gesamte neue Umgebung erneut geladen wird.

Sie können die Umgebungsvariable für Ihr Skript mit os.environ["ASD"] = "asd" Syntax festlegen.

Verwandte Themen