تقنية

get_osfhandle في بايثون: ما الفرق بين الواصف والمقبض؟

الواصف مدخل والمقبض ناتج
دوران مختلفان. [1] [2] [3] [4]

نفحص ملفًا مؤقتًا في ويندوز. [1] [2] [3] [4]

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

الواصف مدخل؛ الناتج مقبض نظام التشغيل المرتبط به. [1] [2] [3] [4]

  • نأخذ fd من f.fileno(). [1] [2] [3] [4]
  • يعطي get_osfhandle(fd) مقبضًا؛ فحص العدد الصحيح True. [1] [2] [3] [4]
  • داخل السياق f.closed يساوي False؛ بعده True. [1] [2] [3] [4]
  • المقبض ليس المحتوى؛ لا تنتقل ملكيته، ولا نفترض اختلاف الرقمين. [1] [2] [3] [4]
  • الواصف غير المعروف يرفع OSError. [1] [2] [3] [4]
  • ويندوز و3.12.14؛ إغلاق بالسياق، دون CloseHandle منفصل. لا تدفقات قياسية أو أنابيب. [1] [2] [3] [4]

المثال

import msvcrt,tempfile
with tempfile.TemporaryFile() as f:
 fd=f.fileno()
 h=msvcrt.get_osfhandle(fd)
 print(isinstance(h,int))
 print(f.closed)
print(f.closed)

[1] [2] [3] [4]

المخرجات True ثم False ثم True. [1] [2] [3] [4]

الارتباط والملكية

المقبض مرتبط بالواصف؛ لا يفترض المثال اختلاف قيمتيهما عدديًا. [1] [2] [3] [4]

حالة الإغلاق داخل السياق وبعده
يغلق السياق الملف. [1] [2] [3] [4]

أبقينا إغلاق الملف للسياق. لا تستدع CloseHandle للمقبض المستخرج؛ ملكيته للواصف. [1] [2] [3] [4]

الحدود

أنشأنا ملفًا حقيقيًا. لا نختبر تدفقات قياسية أو أنابيب، ولا صلاحية المحتوى. الواصف غير المعروف يرفع OSError. [1] [2] [3] [4]

المراجع

  1. Python: msvcrt
  2. CPython3.12.14: msvcrt wrapper
  3. Microsoft: _get_osfhandle
  4. Microsoft: GetFileType
  5. موضوع تك: لغة بايثون — مفردات
  6. موضوع تك: تطبيقات بايثون — مفردات

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