2012-08-06 4 views
7

Ich brauche dies zu tun:Python-Subprozesssatz Shell-Var. und dann Befehl ausführen - wie?

$ export PYRO_HMAC_KEY=123 
$ python -m Pyro4.naming 

So fand ich, dass die zweite Möglichkeit ist mit

subprocess.Popen(['python','-m','Pyro4.naming']) 

aber wie Export Shell-Variable vor, das zu tun?

+0

Haben Sie einen zwingenden Grund, von Shell zu Python zu wechseln? Wenn das Shell-Skript funktioniert, kann es leicht von Python aus aufgerufen werden. – Lenna

+0

Ja, ich möchte keine zusätzliche Datei wie 'run_me.sh' erstellen, es ist nicht so ... kanonische Art :) – scythargon

Antwort

14

So aktualisieren Sie die vorhandene Umgebung ...

import os, subprocess 

d = dict(os.environ) # Make a copy of the current environment 
d['PYRO_HMAC_KEY'] = '123' 
subprocess.Popen(['python', '-m', 'Pyro4.naming'], env=d) 
+2

oder als Einzeiler: 'env = dict (os.environ, PYRO_HMAC_KEY = '123')' – jfs

8

Subprocess Funktionen akzeptieren ein env Argument, das eine Abbildung von Umgebungsvariablen gegeben werden kann, in dem Prozess zu verwenden:

subprocess.Popen(['python','-m','Pyro4.naming'], env={'PYRO_HMAC_KEY': '123'}) 
+3

Damit bleibt die Umgebung des Subprozesses leer, außer 'PYRO_HMAC_KEY'. – chepner

+0

@ F.J vielen Dank! – scythargon