حتما تا به حال موقع print خروجی برنامه های پایتون در یک فایل text به این مشکل برخورده اید که تمام خروجی برنامه یک جا باهم بعد از اتمام اجرای برنامه در فایل خروجی print میشود. این مشکل بیشتر در برنامه هایی به چشم میاید که قرار نیست هیچوقت به پایان برسند و همیشه در حال اجرا خواهند بود و یا اتمام آنها مدت زمان زیادی طول خواهد کشید.
پایتون نوشتن در stdout را cache میکند، این به این معنا است که برای بالا بردن سرعت هر بار که متنی print میشود آن را در stdout نمی نویسد و در نهایت در انتهای پروسس همه ی متن های print شده را یکجا باهم در stdout می نویسد. اینگونه اینکار از این که بخواهد یکی یکی بنویسد سریعتر انجام میشود، اما برای حل این مشکل چندین راه حل وجود دارد.
اگر پیش از این اینگونه عمل print را انجام می دادید:
print('Hello World !!!')
برای حل این مشکل کافی است print را به این صورت انجام دهید:
print('Hello World !!!', flush=True)
و یا به جای استفاده از تابع print از ماژول sys کمک بگیرید:
import sys sys.stdout.write('Hello World !!!\n') sys.stdout.flush()
اما توصیه میشود بدون ایجاد تغییر در کدهایتان برای حل این مشکل تنها برنامه ی پایتون را به این صورت اجرا نمایید:
python3 -u app.py
و یا اینکه با یکبار وارد کردن دستور زیر در command line دیگر لازم نیست تغییری در کدهایتان بدهید و میتوانید هم به همان شیوه ی سابق برنامه را اجرا نمایید:
export PYTHONUNBUFFERED=1 python3 app.py