इस सवाल का पहले से ही एक उत्तर है: < / P>
- 2 जवाब
मैं निष्पादित करने की कोशिश कर रहा हूं एक शेल कमांड को अजगर (2.6.4) से दूसरे प्रोग्राम के तर्क के रूप में देने से पहले एक सरल सूत्र का मूल्यांकन करने के लिए। मेरा इनपुट इस तरह कुछ सरल है:
$ [2 * 2]
मैं उस अभिव्यक्ति का मूल्यांकन करना चाहता हूं और परिणाम को मेरे पायथन स्क्रिप्ट के भीतर प्राप्त करना चाहता हूं इसलिए मैं बाद में इसका उपयोग कर सकता हूं। वर्तमान में, मैं यह कर रहा हूं (जहां टोकन
है $ [2 * 2]
):
टोकन = उपप्रक्रिया.पोपेन ([ "Echo", token], stdout = subprocess.PIPE) .communicate () [0] .strip ()
मुझे उम्मीद है कि आउटपुट को 4
होना चाहिए, लेकिन इसके बजाय यह मुझे अपना मूल टोकन ( $ [2 * 2]
) को वापस दे रहा है। जाहिर है जब मैं खोल से कूदता हूं और इस आदेश को हाथ से ( प्रतिध्वनि $ [2 * 2]
चलाता हूं, मुझे उम्मीद के अनुसार 4
मिलता है।
क्या इस बात के बारे में कुछ विशेष है कि अजगर कैसे इस आदेश को निष्पादित करता है जो मुझे याद आ रहा है?
जब आप आपके शेल में $ [2 * 2]
प्रतिध्वनि करें, शैल $ [2 * 2]
का मूल्यांकन करता है और उस मूल्यांकन के परिणामों को गूंज
कमांड अपने पायथन कोड में, आप $ [2 * 2]
को सीधे प्रतिध्वनित करने के लिए गुजर रहे हैं और इसलिए, वह बस वापस लौट रहा है।
आप अपने आदेश का मूल्यांकन करने के लिए एक शेल का उपयोग कर सकते हैं shell = true
में subprocess.Popen
:
टोकन = subprocess.Popen (["echo" + token], stdout = subprocess का उपयोग करके .िपिप, शेल = ट्रू) .संचार () [0] .स्ट्रिप ()
Comments
Post a Comment