2012-08-06 9 views
7

Ho bisogno di fare questo:python subprocess set shell var. e poi esegui il comando: come?

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

Così, ho trovato che la seconda è possibile fare con

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

ma come variabile di shell di esportazione prima?

+0

Hai un motivo valido per passare dalla shell a Python? Se lo script della shell funziona, può essere facilmente chiamato da Python. – Lenna

+0

sì, non voglio creare file aggiuntivi come 'run_me.sh' non è così ... modo canonico :) – scythargon

risposta

14

Per aggiornare l'ambiente esistente ...

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

o come one-liner: 'env = dict (os.environ, PYRO_HMAC_KEY = '123')' – jfs

8

Le funzioni di processo parziali accettare un env argomento che può essere data una mappatura delle variabili d'ambiente da utilizzare nel processo:

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

Questo lascia l'ambiente del sottoprocesso vuoto eccetto per 'PYRO_HMAC_KEY'. – chepner

+0

@ F.J grazie mille! – scythargon

Problemi correlati