تقنية

onecmd في بايثون: هل يستدعي precmd وpostcmd؟

onecmd المباشر يشغل معالج bud وحده
إرسال مباشر. [1] [2]

حدّد هل تدخل الحلقة أم ترسل أمرًا مباشرة. [1] [2]

الخلاصة السريعة

لا؛ onecmd الموروث لا يستدعي هذين الخطافين مباشرة. [1] [2]

  • عرّفنا precmd وpostcmd لطباعة اسميهما. [1] [2]
  • onecmd("bud") يطبع do فقط. [1] [2]
  • حلقة الأمر المحجوز تطبع pre ثم do ثم post. [1] [2]
  • يعيد معالجنا True؛ فيوقف الحلقة بعد الأمر. [1] [2]
  • اختبرنا 3.12.14؛ بلا قراءة طرفية أو صدفة نظام. [1] [2]

المثال

import cmd
class Shell(cmd.Cmd):
 def precmd(self,s):
  print("pre");return s
 def do_bud(self,s):
  print("do");return True
 def postcmd(self,stop,s):
  print("post");return stop
x=Shell()
x.use_rawinput=False
x.onecmd("bud")
print("---")
x.cmdqueue=["bud"]
x.cmdloop()

[1] [2]

الحلقة تضم الخطافين

المصدر يستدعي precmd ثم onecmd ثم postcmd داخل cmdloop. قبل الفاصل نرى do؛ بعده نرى الأسطر الثلاثة بالترتيب. [1] [2]

cmdloop يستدعي precmd ثم المعالج ثم postcmd
ترتيب الحلقة. [1] [2]

حد المقارنة

تجاوزنا الخطافين ومعالج الأمر فقط؛ لم نغير onecmd أو cmdloop. نتيجة المسار المباشر ليست دليلًا على تشغيل خطافَي الحلقة في فئة مخصصة أخرى. [1] [2]

المراجع

  1. Python 3.12: Cmd execution hooks
  2. CPython 3.12.14: dispatch and loop
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.