2015-06-29 25 views
6

मैं कुछ वातावरण चर है कि मैं एक अजगर स्क्रिप्टएक खोल स्क्रिप्ट से लोड वातावरण चर

निम्नलिखित काम करता है कमांड लाइन

$ source myFile.sh 
$ python ./myScript.py 

और अजगर अंदर से फार्म में उपयोग करना चाहते हैं के साथ एक फ़ाइल है स्क्रिप्ट मैं की तरह चर का उपयोग कर सकते

import os 
os.getenv('myvariable') 

मैं कैसे खोल स्क्रिप्ट स्रोत कर सकते हैं, तो अजगर स्क्रिप्ट के साथ से, चर का उपयोग?

+0

आपका क्या मतलब है? क्या आपका मतलब है कि आप पर्यावरण चर कैसे सेट करते हैं? – jonrsharpe

+0

मैं पाइथन लिपि के अंदर से 'स्रोत myFile.sh' को कॉल करना चाहता हूं और फिर – lafferc

+0

चर का उपयोग करना चाहता हूं तो आप बस जानना चाहते हैं कि पायथन से कमांड कैसे चलाएं? क्या आपने * उस * की खोज करने की कोशिश की है? * "लोड पर्यावरण चर" * लगता है कि आप पूरी तरह से आकस्मिक ** जो आप प्राप्त करने की कोशिश कर रहे हैं। – jonrsharpe

उत्तर

9

यदि आप पिछड़े पर्यावरण प्रचार कह रहे हैं, क्षमा करें, तो आप नहीं कर सकते। यह एक सुरक्षा मुद्दा है। हालांकि, अजगर से सीधे स्रोत पर्यावरण निश्चित रूप से मान्य है। लेकिन यह मैन्युअल प्रक्रिया कम या कम है।

import subprocess as sp 

SOURCE = 'your_file_path' 
proc = sp.Popen(['bash', '-c', 'source {} && env'.format(SOURCE)], stdout=sp.PIPE) 

source_env = {tup[0].strip(): tup[1].strip() for tup in map(lambda s: s.strip().split('=', 1), proc.stdout)} 

तब आपके पास source_env में आपकी आवश्यकता है।

आप (, जो अनुशंसित नहीं है के बाद से source_env आप को साफ रखता है) इसे वापस अपने स्थानीय पर्यावरण के लिए लिखने के लिए की जरूरत है:

import os 

for k, v in source_env.items(): 
    os.environ[k] = v 

एक और छोटे ध्यान यहाँ भुगतान किया जाना चाहिए, के बाद से मैं है यहां bash कहा जाता है, आपको उम्मीद करनी चाहिए कि नियम यहां भी लागू किए गए हैं। तो यदि आप अपने चर को देखना चाहते हैं, तो आपको उन्हें निर्यात करने की आवश्यकता होगी।

export VAR1='see me' 
VAR2='but not me' 
+1

यह सभी संभावित पर्यावरण परिवर्तनीय मानों के लिए ठीक से काम नहीं करेगा - 'env' का आउटपुट अनैच्छिक रूप से पार्स किए जाने का इरादा नहीं है। –

+1

@ चार्ल्स डफी सच। कोने के मामले हैं। वास्तव में इसके साथ निपटने का एक संभावित तरीका एक और स्क्रिप्ट की आवश्यकता होगी जो 'k = v' को' \ 0' द्वारा सीमित करता है। वास्तव में – HuStmpHrrr

+0

। कोई भी 'बिल्ली/proc/self/वातावरण' भी कर सकता है, जो कि उस प्रारूप को छोड़ देगा, अगर एकमात्र ओएस जिसे समर्थित होना आवश्यक है लिनक्स है। :) –

-2

आप सामान्य रूप से एक बैश या खोल स्क्रिप्ट से पर्यावरणीय चर लोड कर सकते हैं, यह एक अलग भाषा है। आपको फ़ाइल का मूल्यांकन करने के लिए बैश का उपयोग करना होगा और फिर किसी भी तरह चर को प्रिंट करना होगा और फिर उन्हें पढ़ना होगा। देखें Forcing bash to expand variables in a string loaded from a file

संबंधित मुद्दे