जैसे ही सबप्रोसेस अपने स्टडआउट बफर को फ्लश करके लाइन से सबप्रोसेस 'आउटपुट लाइन प्राप्त करने के लिए:
from subprocess import Popen, PIPE
p = Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1)
with p.stdout:
for line in iter(p.stdout.readline, b''):
print line,
p.wait()
iter()
पाइथन 2 में रीड-फ़ॉरवर्ड बग को वर्कअराउंड करने के लिए लिखे जाते ही लाइनों को पढ़ने के लिए उपयोग किया जाता है ।
यदि सबप्रोसेस 'स्टडआउट गैर-संवादात्मक मोड में एक लाइन बफ़रिंग के बजाय ब्लॉक बफ़रिंग का उपयोग करता है (जो कि बच्चे के बफर पूर्ण होने तक या बच्चे द्वारा स्पष्ट रूप से फ्लश होने तक उत्पादन में देरी की ओर जाता है) तो आप एक असंबद्ध आउटपुट का उपयोग करने के लिए मजबूर करने का प्रयास कर सकते हैं pexpect
, pty
मॉड्यूल या unbuffer
, stdbuf
, script
उपयोगिताओं , देख क्यों नहीं सिर्फ एक पाइप का उपयोग करें (popen ()): क्यू?
यहाँ पायथन 3 कोड है:
from subprocess import Popen, PIPE
with Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1,
universal_newlines=True) as p:
for line in p.stdout:
print(line, end='')
नोट: पाइथन 2 के विपरीत जो उपप्रकार के बाइटस्ट्रेस का उत्पादन करता है; पायथन 3 पाठ मोड का उपयोग करता है ( locale.getpreferredencoding(False)
एन्कोडिंग का उपयोग करके cmd का आउटपुट डिकोड किया गया है )।