2011-07-11 10 views
48

में बराबर है, मैं कुछ शेल कमांड जैसे ls या df से एक पायथन लिपि में आउटपुट प्राप्त करना चाहता हूं। मुझे लगता है कि commands.getoutput('ls') बहिष्कृत है लेकिन subprocess.call('ls') केवल मुझे रिटर्न कोड मिलेगा।पायथन गेटआउटपुट() उपप्रोसेसर

मुझे आशा है कि कुछ सरल समाधान होगा।

उत्तर

70

उपयोग subprocess.Popen:

import subprocess 
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE) 
out, err = process.communicate() 
print(out) 

ध्यान दें कि ब्लॉक संवाद जब तक प्रक्रिया समाप्त हो जाता है। आप process.stdout.readline() का उपयोग कर सकते हैं यदि आपको इसे समाप्त होने से पहले आउटपुट की आवश्यकता हो। अधिक जानकारी के लिए documentation देखें।

+0

'subprocess' उदाहरण के अजगर 2.7 संस्करण के लिए सही वर्तमान दस्तावेज़ लिंक है: http://docs.python.org/library/subprocess.html#replacing-older-functions-with-the -सबप्रोसेस-मॉड्यूल; पायथन 3.2 के लिए, http://docs.python.org/py3k/library/subprocess.html#replacing-older-functions-with-the-subprocess- मॉड्यूल –

+5

आपको शायद प्रक्रिया के साथ subprocess.communicate() को प्रतिस्थापित करने की आवश्यकता है। संचार() - आपको प्रक्रिया करके सबप्रोसेस निकास कोड की भी आवश्यकता हो सकती है। रीटर्नकोड – Cinquo

+0

मैंने यह नहीं देखा कि मैंने प्रक्रिया के बजाय उपप्रोसेसर लिखा था। फिक्स्ड। –

36

पायथन के लिए> = 2.7, subprocess.check_output() का उपयोग करें।

http://docs.python.org/2/library/subprocess.html#subprocess.check_output

+4

तकनीकी रूप से, यह 'subprocess.check_output (cmd, shell = True) होना चाहिए। – Cerin

+1

अंतर या गलत अंतर क्या है? –

+1

मुझे लगता है कि यह फ़ाइल ग्लोबिंग, पाइपिंग इत्यादि जैसे "शैल विशिष्ट विशेषताओं" को सक्षम बनाता है ... –