2011-12-28 11 views
14

मुझे एक चर कमांड के परिणाम को संग्रहीत करने की आवश्यकता है जिसे मैंने एक चर में निष्पादित किया था। लेकिन मैं इसे प्राप्त नहीं कर सका। मैंने कोशिश की:पायथन में एक चर में निष्पादित शेल कमांड के परिणाम को कैसे संग्रहीत करें?

call=os.system("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'") 
print call 

लेकिन यह परिणाम को टर्मिनल में प्रिंट करता है और कॉल के मूल्य को शून्य के रूप में प्रिंट करता है, संभवतः सफलता के रूप में इंगित करता है। एक चर में संग्रहीत परिणाम कैसे प्राप्त करें?

+1

यहां देखें: http://stackoverflow.com/questions/1410976/equivalent-of-backticks-in-python – georg

उत्तर

26

बजाय subprocess मॉड्यूल का उपयोग करें:

import subprocess 
output = subprocess.check_output("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'", shell=True) 

संपादित करें: इस अजगर 2.7 में नया है। पहले के संस्करणों में यह (आदेश फिर से लिखा के साथ नीचे के रूप में दिखाया गया है) काम करना चाहिए:

import subprocess 
output = subprocess.Popen(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'], stdout=subprocess.PIPE).communicate()[0] 

एक तरफ ध्यान दें के रूप में, आप

cat syscall_list.txt | grep f89e7000 

करने के लिए

grep f89e7000 syscall_list.txt 

पुनर्लेखन कर सकते हैं और आप पूरे कथन को एक awk स्क्रिप्ट के साथ भी बदल सकते हैं:

लिए अग्रणी:

import subprocess 
output = subprocess.check_output(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt']) 
+0

मैं पाइथन 2.6.6 का उपयोग कर रहा हूं और यह मुझे त्रुटि देता है: ' विशेषताइंटर: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'check_output' ' – user567879

+0

@ user567879, आप सही हैं। यह फ़ंक्शन पायथन 2.7 में जोड़ा गया था। मैं पायथन 2.6 के लिए एक विधि में संपादित करूँगा। –

+0

क्या होगा यदि मुझे निष्पादित शेल कमांड के लिए एक तर्क के रूप में एक पायथन वैरिएबल पास करने की आवश्यकता है? – user567879

9

commands.getstatusoutput इस स्थिति के लिए अच्छी तरह से काम करेगा।

import commands 
print(commands.getstatusoutput("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'")) 
+0

आप मेरे हीरो हैं! – quickshiftin

+0

लिंक अब और काम नहीं करता है और इसे 3.x में हटा दिया गया है https://docs.python.org/2/library/commands.html – user3885927

0

अन्य सभी यहाँ जवाब ठीक जवाब नहीं है। कई स्थितियों में, आपको बाहरी आदेश चलाने की आवश्यकता है।

इस विशिष्ट उदाहरण में एक और विकल्प है: आप फ़ाइल को पढ़ सकते हैं, लाइन से लाइन को संसाधित कर सकते हैं, और आउटपुट के साथ कुछ कर सकते हैं।

हालांकि यह उत्तर "अधिक सामान्य प्रश्न पूछने" के लिए काम नहीं करता है, मुझे लगता है कि इसे हमेशा माना जाना चाहिए। यह हमेशा "सही उत्तर" नहीं है, यहां तक ​​कि जहां भी संभव हो। इसे (आसान) याद रखना, और यह जानना (नहीं) इसे लागू करना (अधिक कठिन), आपको एक बेहतर प्रोग्रामर बना देगा।

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

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