2012-08-06 63 views
7

我需要這樣做:python subprocess set shell var。然後運行命令 - 如何?

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

所以,我發現,第二個是有可能與之前

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

但如何導出Shell變量呢?

+0

您是否有充足的理由從shell切換到Python?如果shell腳本起作用,可以很容易地從Python中調用它。 – Lenna 2012-08-06 20:47:18

+0

是的,我不想創建像'run_me.sh'這樣的附加文件,它不是那麼...規範的方式:) – scythargon 2012-08-06 21:48:58

回答

14

要更新現有的環境...

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

或作爲一行:'env = dict(os.environ,PYRO_HMAC_KEY ='123')' – jfs 2015-08-19 00:49:46

8

子流程功能接受env論點,即可以給出環境變量的映射的過程中的使用方法:

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

這使得子進程環境除'PYRO_HMAC_KEY'之外爲空。 – chepner 2012-08-06 19:46:14

+0

@ F.J非常感謝! – scythargon 2012-08-06 21:50:05