Seite 1 von 1

globale Environment Variable

Verfasst: Mittwoch 2. Juni 2010, 15:20
von dnoack
Hallo,
ich möchte in einer Python Function eine Environment Variable setzen z.B.

def myfunc() :
import os
os.environ['myvariable'] = 'abc'

Diese Variable möchte ich anschließend von einem Fortran-Programm, das unter Python gestartet wird lesen mit

call getenv('myvariable',myvar)

Das Fortran-Pogramm kann jedoch myvariable nicht finden und bringt in myvar einen leeren Zeichenstring zurück. Ich vermute, dass myvariable nur lokal gestzt wird und beim Verlassen der Function nicht mehr definiert ist.

Gibt es eine Möglichkeit, aus der Python-Function heraus eine Environment-Variable global zu setzen, so dass sie auch nach verlassen der Function oder am Besten unter Linux mit

echo $myvariable

zu sehen ist?

Re: globale Environment Variable

Verfasst: Mittwoch 2. Juni 2010, 15:51
von cofi
Nein, das geht so nicht. Environment-Variablen sind an ihre Prozesse gebunden, du kannst aber das Fortran-Programm aus Python starten, so dass es das Environment erbt.

Re: globale Environment Variable

Verfasst: Samstag 5. Juni 2010, 11:14
von sma

Code: Alles auswählen

subprocess.call(["python", "-c", "import os;print(os.environ)"], env={"foo": "bar"})
Stefan

Re: globale Environment Variable

Verfasst: Samstag 5. Juni 2010, 11:28
von lunar
@sma:

Code: Alles auswählen

env = dict(os.environ)
env['foo'] = 'bar'
subprocess.call(["python", "-c", "import os;print(os.environ)"], env=env)
Ohne $PATH funktioniert der Aufruf nicht ...

Re: globale Environment Variable

Verfasst: Samstag 5. Juni 2010, 11:47
von sma
Bei mir geht's:

Code: Alles auswählen

sma$ python
Python 2.6.5 (r265:79063, May 29 2010, 13:19:44) 
[GCC 4.2.1 (Apple Inc. build 5646) (dot 1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.call(["python", "-c", "import os;print(os.environ)"], env={"foo": "bar"})
{'__CF_USER_TEXT_ENCODING': '0x1F5:0:3', 'foo': 'bar', 'VERSIONER_PYTHON_PREFER_32_BIT': 'no', 'VERSIONER_PYTHON_VERSION': '2.6'}
0
Stefan

Re: globale Environment Variable

Verfasst: Samstag 5. Juni 2010, 12:07
von lunar
Stimmt, mein Fehler ...

Re: globale Environment Variable

Verfasst: Samstag 5. Juni 2010, 18:34
von Dav1d
ich würde "python" im subprocess-call mit sys.executable ersetzten