সাবপ্রসেসটি তার স্টাডআউট বাফারটি ফ্লাশ করার সাথে সাথে সাব-প্রসেসের আউটপুট লাইনটি লাইনের সাথে পেতে:
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)
এনকোডিং ব্যবহার করে ডিকোড করা হয় )।