2012-08-06 11 views
7

tengo que hacer esto:python subprocess set shell var. y luego ejecuta el comando, ¿cómo?

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

Por lo tanto, me encontré con que el segundo es posible hacerlo con

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

pero la forma variable de shell de exportación antes de eso?

+0

¿Tiene una razón convincente para cambiar de shell a Python? Si el script de shell funciona, se puede invocar fácilmente desde Python. – Lenna

+0

sí, no quiero crear un archivo adicional como 'run_me.sh', no es así ... vía canónica :) – scythargon

Respuesta

14

Para actualizar el entorno existente ...

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 como un trazador de líneas: 'env = dict (os.environ, PYRO_HMAC_KEY = '123')' – jfs

8

Las funciones de subproceso aceptar un argumento env que se puede dar un mapeo de las variables de entorno para utilizar en el proceso:

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

Esto deja el entorno del subproceso vacío excepto 'PYRO_HMAC_KEY'. – chepner

+0

@ F.J muchas gracias! – scythargon

Cuestiones relacionadas