عرض المخرجات المستمر أثناء تنفيذ العملية
في نصوص بايثون، غالبًا ما نستخدم العمليات الفرعية لتنفيذ البرامج الخارجية. على الرغم من أن هذه قدرة قوية، إلا أنه قد يكون من المحبط الانتظار حتى تكتمل العملية قبل استرداد مخرجاتها. لمعالجة هذه المشكلة، دعونا نستكشف طريقة لدفق مخرجات العملية بشكل مستمر أثناء تشغيلها.
تقليديًا، نستخدم subprocess.communicate() لالتقاط مخرجات العملية بالكامل بمجرد انتهائها. ومع ذلك، يتطلب هذا الأسلوب أن تكتمل العملية بالكامل قبل أن يتم عرض أي مخرجات.
لتمكين الإخراج المستمر، يمكننا الاستفادة من وظيفة iter بالاشتراك مع fd.readline(). يتيح لنا ذلك التكرار عبر التدفق القياسي للعملية، والتقاط الخطوط عندما تصبح متاحة:
import subprocess
def execute(cmd):
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
for stdout_line in iter(popen.stdout.readline, ""):
yield stdout_line
popen.stdout.close()
return_code = popen.wait()
if return_code:
raise subprocess.CalledProcessError(return_code, cmd)
في هذا الإصدار المحسن، ننتج كل سطر من stdout عندما يصبح متاحًا. يسمح هذا للبرنامج النصي بعرض المخرجات بشكل مستمر كما تم إنشاؤها بواسطة العملية.
إليك مثال توضيحي:
for path in execute(["locate", "a"]):
print(path, end="")
باستخدام هذا الأسلوب، يمكننا باستمرار عرض المسارات المطابقة لاستعلام البحث "a" كما تم العثور عليها بواسطة أمر "locate"، مما يوفر تعليقات في الوقت الفعلي على تقدم العملية.
تسمح هذه التقنية بمراقبة المخرجات بشكل مستمر، وتعزيز التفاعل وتجربة المستخدم للنصوص التي تطلق عمليات خارجية.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3