2012-08-06 6 views
7

मैं यह करने की जरूरत है:पायथन उपप्रोसेस सेट खोल var। और फिर आदेश चलाएं - कैसे?

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

तो, मैंने पाया कि एक दूसरे से पहले

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

लेकिन कैसे निर्यात खोल चर के साथ क्या करना संभव है?

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

क्या आपके पास खोल से पायथन तक स्विच करने के लिए एक अनिवार्य कारण है? यदि खोल स्क्रिप्ट काम करता है, तो इसे आसानी से पायथन से बुलाया जा सकता है। – Lenna

+0

हां, मैं 'run_me.sh' जैसी अतिरिक्त फ़ाइल नहीं बनाना चाहता हूं, ऐसा नहीं है ... कैनोलिक तरीका :) – scythargon

उत्तर

14

मौजूदा वातावरण को अद्यतन करने के

+2

या एक लाइनर के रूप में: 'env = dict (os.environ, PYRO_HMAC_KEY = '123')' – jfs

8

उपप्रक्रिया कार्यों एक env तर्क यह है कि वातावरण चर की मैपिंग की प्रक्रिया में उपयोग करने के लिए दिया जा सकता है स्वीकार ...

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) 
+3

यह' PYRO_HMAC_KEY 'को छोड़कर उपप्रोसेस के पर्यावरण को खाली छोड़ देता है। – chepner

+0

@ एफजे धन्यवाद! – scythargon