পাইথন প্রিন্টের ফ্লাশ আউটপুট কীভাবে?
আমি এটি করার পাঁচটি উপায়ের পরামর্শ দিচ্ছি:
- পাইথন 3 এ কল করুন
print(..., flush=True)
(পাইথন 2 এর মুদ্রণ ফাংশনে ফ্লাশ যুক্তি উপলব্ধ নেই, এবং মুদ্রণ বিবৃতিটির জন্য কোনও অ্যানালগ নেই)।
file.flush()
আউটপুট ফাইলটিতে কল করুন (এটি করার জন্য আমরা পাইথন 2 এর মুদ্রণ ফাংশনটি গুটিয়ে রাখতে পারি), উদাহরণস্বরূপ,sys.stdout
- এটি মডিউলের প্রতিটি মুদ্রণ ফাংশন কলটিতে আংশিক ফাংশন সহ
print = partial(print, flush=True)
প্রয়োগ করুন, মডিউলটি বিশ্বব্যাপী প্রয়োগ করা হবে।
-u
এটি ইন্টারপ্রিটার কমান্ডকে একটি পতাকা ( ) দিয়ে প্রক্রিয়ায় প্রয়োগ করুন
- আপনার পরিবেশের প্রতিটি অজগর প্রক্রিয়াতে এটি প্রয়োগ করুন
PYTHONUNBUFFERED=TRUE
(এবং এটিকে পূর্বাবস্থায় ফেলার জন্য পরিবর্তনশীলটি আনসেট করুন)।
পাইথন ৩.৩++
পাইথন ৩.৩ বা ততোধিক উচ্চতর ব্যবহার করে আপনি কেবল ফাংশনটিতে flush=True
একটি মূলশব্দ যুক্তি হিসাবে সরবরাহ করতে পারেন print
:
print('foo', flush=True)
পাইথন 2 (বা <3.3)
তারা flush
পাইথন ২.7 এ যুক্তিটির ব্যাকপোর্ট করেনি তাই আপনি যদি পাইথন ২ ব্যবহার করেন (বা ৩.৩ এর চেয়ে কম) এবং যদি কোডটি 2 এবং 3 উভয়ের সাথেই সামঞ্জস্যপূর্ণ হয় তবে আমি নীচের সামঞ্জস্য কোডটি প্রস্তাব করতে পারি। (নোট করুন __future__
আমদানি অবশ্যই / খুব " আপনার মডিউলের শীর্ষের নিকটে "):
from __future__ import print_function
import sys
if sys.version_info[:2] < (3, 3):
old_print = print
def print(*args, **kwargs):
flush = kwargs.pop('flush', False)
old_print(*args, **kwargs)
if flush:
file = kwargs.get('file', sys.stdout)
# Why might file=None? IDK, but it works for print(i, file=None)
file.flush() if file is not None else sys.stdout.flush()
উপরের সামঞ্জস্যতা কোডটি বেশিরভাগ ব্যবহারগুলিকে কভার করবে তবে আরও বিশদ চিকিত্সার জন্য six
মডিউলটি দেখুন ।
বিকল্পভাবে, আপনি কেবল file.flush()
মুদ্রণের পরে কল করতে পারেন , উদাহরণস্বরূপ, পাইথন 2 এ মুদ্রণ বিবৃতি সহ:
import sys
print 'delayed output'
sys.stdout.flush()
একটি মডিউলে ডিফল্ট পরিবর্তন করে flush=True
আপনি একটি মডিউলটির বিশ্বব্যাপী ফান্টুলস.পার্পিয়াল ব্যবহার করে মুদ্রণ ফাংশনের জন্য ডিফল্ট পরিবর্তন করতে পারেন:
import functools
print = functools.partial(print, flush=True)
আপনি যদি আমাদের নতুন আংশিক ফাংশনটি দেখেন তবে কমপক্ষে পাইথন 3 এ:
>>> print = functools.partial(print, flush=True)
>>> print
functools.partial(<built-in function print>, flush=True)
আমরা দেখতে পাই এটি সাধারণের মতো কাজ করে:
>>> print('foo')
foo
এবং আমরা আসলে নতুন ডিফল্টকে ওভাররাইড করতে পারি:
>>> print('foo', flush=False)
foo
আবার নোট করুন, এটি কেবলমাত্র বর্তমান বৈশ্বিক সুযোগ পরিবর্তন করে, কারণ বর্তমান বৈশ্বিক স্কোপের মুদ্রণের নামটি বিল্টিন print
ফাংশনকে ছায়া দেবে (বা সেই বর্তমান বৈশ্বিক সুযোগে পাইথন 2-তে একটি ব্যবহার করলে সামঞ্জস্যতা ফাংশনটিকে অবহেলা করবে)।
আপনি যদি কোনও মডিউলের গ্লোবাল স্কোপের পরিবর্তে কোনও ফাংশনের ভিতরে এটি করতে চান তবে আপনার এটির আলাদা নাম দেওয়া উচিত, যেমন:
def foo():
printf = functools.partial(print, flush=True)
printf('print stuff like this')
যদি আপনি কোনও ফাংশনে এটি বিশ্বব্যাপী ঘোষণা করেন, আপনি এটি মডিউলটির গ্লোবাল নেমস্পেসে পরিবর্তন করছেন, সুতরাং আপনার কেবল সুনির্দিষ্ট আচরণটি আপনি চান না তা অবধি বৈশ্বিক নেমস্পেসে রেখে দেওয়া উচিত।
প্রক্রিয়াটির জন্য ডিফল্ট পরিবর্তন করা হচ্ছে
আমি মনে করি যে এখানে অপশনটি সবচেয়ে ভাল বিকল্প হ'ল -u
অসম্পূর্ণ আউটপুট পেতে পতাকাটি ব্যবহার করা ।
$ python -u script.py
অথবা
$ python -um package.module
ডক্স থেকে :
স্টিডিন, স্টডআউট এবং স্ট্ডারকে পুরোপুরি অবিরাম হতে বাধ্য করুন। যে সিস্টেমে এটি গুরুত্বপূর্ণ সেখানে স্টিন, স্ট্ডআউট এবং স্টার্ডারকে বাইনারি মোডে রাখুন।
নোট করুন যে file.readlines () এবং ফাইল অবজেক্টস (sys.stdin লাইনের জন্য) এ অভ্যন্তরীণ বাফারিং রয়েছে যা এই বিকল্প দ্বারা প্রভাবিত নয়। এটির কাজ করার জন্য, আপনি 1: লুপের মধ্যেই ফাইল ড্রেডলাইন () ব্যবহার করতে চান।
শেল অপারেটিং পরিবেশের জন্য ডিফল্ট পরিবর্তন করা হচ্ছে
পরিবেশ বা পরিবেশের সমস্ত অজগর প্রক্রিয়াগুলির জন্য আপনি এই আচরণটি পেতে পারেন যদি আপনি পরিবেশকে পরিবর্তনযোগ্য কোনও স্ট্রিংয়ে সেট করেন:
যেমন লিনাক্স বা ওএসএক্সে:
$ export PYTHONUNBUFFERED=TRUE
বা উইন্ডোজ:
C:\SET PYTHONUNBUFFERED=TRUE
ডক্স থেকে :
PYTHONUNBUFFERED
যদি এটি একটি খালি খালি স্ট্রিংয়ে সেট করা থাকে তবে এটি -u বিকল্পটি নির্দিষ্ট করার সমান।
অভিযোজ্য বস্তু
পাইথন ২.7.১২ থেকে মুদ্রণ ফাংশনে সহায়তা এখানে রয়েছে - নোট করুন যে কোনও flush
যুক্তি নেই:
>>> from __future__ import print_function
>>> help(print)
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
__future__
সংস্করণটি অন্তর্ভুক্ত নয়flush
কারণ "পাইথন ৩.৩-এ ফ্লাশ যুক্তি যুক্ত করা হয়েছিল (মুদ্রণের পরে) ভবিষ্যতের আমদানির মাধ্যমে ২.7 এ ব্যাকপোর্ট করা হয়েছিল)" বাগসপিপিথন.অর্গ