2010-12-10 20 views
17

मैं os.system() का उपयोग कर टर्मिनल कमांड निष्पादित कर सकता हूं लेकिन मैं इस कमांड के आउटपुट को कैप्चर करना चाहता हूं। मैं यह कैसे कर सकता हूँ?मैं पाइथन में टर्मिनल आउटपुट कैसे प्राप्त कर सकता हूं?

उत्तर

34
>>> import subprocess 
>>> cmd = [ 'echo', 'arg1', 'arg2' ] 
>>> output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0] 
>>> print output 
arg1 arg2 

>>> 

subprocess.PIPE का उपयोग करने में एक बग है। विशाल उत्पादन उपयोग इस के लिए:

import subprocess 
import tempfile 

with tempfile.TemporaryFile() as tempf: 
    proc = subprocess.Popen(['echo', 'a', 'b'], stdout=tempf) 
    proc.wait() 
    tempf.seek(0) 
    print tempf.read() 
+0

तुम मेरे रक्षक हैं उपयोग करने के लिए है !!! मैं कुछ दिनों के लिए इस तरह की तलाश कर रहा हूँ !!! धन्यवाद! –

14

इसके बजाय subprocess module का उपयोग करें।

pipe = Popen("pwd", shell=True, stdout=PIPE).stdout 
output = pipe.read() 

पायथन 2.7 में, आप check_output() फ़ंक्शन का भी उपयोग कर सकते हैं।

4

आप subprocess में Popen का उपयोग के रूप में वे कर सकते हैं सुझाव।

os, जो recomment नहीं है साथ

, यह नीचे की तरह है:

import os 
a = os.popen('pwd').readlines() 
+0

यह काम नहीं करता है। 'पॉपन' ऑब्जेक्ट्स में 'रीडलाइन()' विधि नहीं है। –

+0

इसे इंगित करने के लिए धन्यवाद, यह केवल os.popen – gerry

+3

'os.popen' के लिए काम करता है' subprocess.Popen' के पक्ष में बहिष्कृत किया गया है। –

0

सबसे आसान तरीका पुस्तकालय आदेश

import commands 
print commands.getstatusoutput('echo "test" | wc') 
+2

आप आदेश मॉड्यूल कहां प्राप्त करते हैं? यह Python3 के लिए पाइप पर प्रतीत नहीं होता है। – Shule

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

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