উত্তর:
পাইথনের স্ট্যান্ডার্ড আউট বাফার করা হয়েছে (অর্থাত এটি টার্মিনালে লেখার আগে এটি স্ট্যান্ডার্ড আউট করার জন্য "লিখিত" কিছু ডেটা সংগ্রহ করে)। কলিং sys.stdout.flush()
এটি বাফারকে "ফ্লাশ" করতে বাধ্য করে, যার অর্থ এটি বাফারে সমস্ত কিছু টার্মিনালে লিখবে, এমনকি যদি এটি সাধারণত এটি করার আগে অপেক্ষা করে।
এখানে কিছু ভাল তথ্য আছে (UN) কেন এটা দরকারী বাফার ইনপুট / আউটপুট এবং:
http://en.wikipedia.org/wiki/Data_buffer
বাফার বনাম unbuffered আই
sys.stdout.write("%d" % i)
করি sys.stdout.flush()
তবে স্ক্রিপ্টটি কার্যকর হওয়ার সাথে সাথে বাফারটি প্রদর্শনের জন্য আমাকে কলটি করতে হবে।
নিম্নলিখিত সাধারণ পাইথন স্ক্রিপ্ট বিবেচনা করুন:
import time
import sys
for i in range(5):
print(i),
#sys.stdout.flush()
time.sleep(1)
এটি পাঁচ সেকেন্ডের জন্য প্রতি সেকেন্ডে একটি নম্বর মুদ্রণের জন্য ডিজাইন করা হয়েছে, তবে আপনি যদি এখন এটি চালান (আপনার ডিফল্ট সিস্টেম বাফারিংয়ের উপর নির্ভর করে) আপনি স্ক্রিপ্টটি শেষ না হওয়া পর্যন্ত কোনও আউটপুট দেখতে পাবেন না এবং তারপরে আপনি একবারে 0 1 2 3 4
মুদ্রিত দেখতে পাবেন পর্দায়।
এর কারণ আউটপুটটি বাফার হচ্ছে এবং আপনি ফ্লাশ না করা পর্যন্ত sys.stdout
প্রতিটিটির পরেprint
না করেন আপনি অবিলম্বে আউটপুটটি দেখতে পাবেন না। sys.stdout.flush()
পার্থক্যটি দেখতে লাইন থেকে মন্তব্য সরান ।
আমার বোঝাপড়া অনুযায়ী, যখনই আমরা প্রিন্ট স্টেটমেন্টগুলি আউটপুট কার্যকর করি তখন বাফারে লেখা হবে। এবং আমরা যখন স্ক্রিনে আউটপুট দেখতে পাব তখন বাফার ফ্লাশ হয়ে যাবে (সাফ হয়ে যাবে)। প্রোগ্রামটি প্রস্থান করলে ডিফল্টরূপে বাফার ফ্লাশ করা হবে। তবে আমরা প্রোগ্রামে "sys.stdout.flush ()" স্টেটমেন্ট ব্যবহার করে বাফার ম্যানুয়ালি ফ্ল্যাশ করতে পারি। নীচের কোডে বাফারটি ফ্লাশ করা হবে যখন আমার মান 5 হয়।
আপনি নীচের কোডটি কার্যকর করে বুঝতে পারবেন।
chiru@online:~$ cat flush.py
import time
import sys
for i in range(10):
print i
if i == 5:
print "Flushing buffer"
sys.stdout.flush()
time.sleep(1)
for i in range(10):
print i,
if i == 5:
print "Flushing buffer"
sys.stdout.flush()
chiru@online:~$ python flush.py
0 1 2 3 4 5 Flushing buffer
6 7 8 9 0 1 2 3 4 5 Flushing buffer
6 7 8 9
print i
আপনার আউটপুট পেতে কমাটি হারিয়েছে
আমার বোঝার অনুসারে sys.stdout.flush () একটি ফাইল অবজেক্টে এই জাতীয় ডেটা বাফার করা সমস্ত তথ্য বের করে দেয়। স্টাডাউট ব্যবহার করার সময়, টার্মিনালে লেখার আগে ডেটা বাফার মেমরিতে (কিছু সময়ের জন্য বা মেমরিটি পূরণ না হওয়া পর্যন্ত) সংরক্ষণ করা হয়। বাফার খালি করার জন্য ফ্লাশ () বাহিনী ব্যবহার করে এবং বাফারটি ফাঁকা স্থান পাওয়ার আগেও টার্মিনালে লিখুন।