عملية بايثون الفرعية.أمثلة مفتوحة

Mlyt Baythwn Alfr Yt Amthlt Mftwht



تعد عملية Python الفرعية إحدى الوحدات المفيدة التي يتم استخدامها لتشغيل أوامر وعمليات shell مختلفة وتنفيذ برنامج نصي آخر أو ملفات قابلة للتنفيذ باستخدام برنامج Python النصي. ويمكن استخدامه أيضًا لإعادة توجيه البيانات من عملية إلى عملية أخرى ومعالجة الأخطاء التي تولدها العمليات الفرعية. تحتوي وحدة العمليات الفرعية على العديد من الفئات التي يتم استخدامها لأغراض مختلفة. تعد فئة 'subprocess.Popen' إحدى فئات هذه الوحدة التي يتم استخدامها للتفاعل مع العمليات الخارجية وتنفيذ أنواع مختلفة من المهام بين العمليات. يتم عرض الاستخدامات المتعددة لفئة 'subprocess.Popen' في برنامج Python النصي في هذا البرنامج التعليمي.

موضوع المحتويات:

  1. قم بتشغيل أمر Linux بسيط
  2. قم بتشغيل أمر باستخدام بيانات الإدخال
  3. قم بتشغيل برنامج بايثون النصي
  4. التعامل مع خطأ العملية الفرعية
  5. قم بإرجاع رمز العملية الفرعية.Popen
  6. إعادة توجيه مخرجات العملية الفرعية إلى الملف
  7. المعالجة المتعددة باستخدام Subprocess.Popen
  8. التعامل مع دفق الإدخال والإخراج س
  9. التحكم في المهلة والتأخير
  10. قراءة مدخلات التدفق

قم بتشغيل أمر Linux بسيط

يتم استخدام أمر 'التاريخ' لعرض تاريخ ووقت النظام الحالي. قم بإنشاء ملف Python باستخدام البرنامج النصي التالي الذي يقوم بإنشاء عملية فرعية تنفذ أمر 'التاريخ' وطباعة مخرجات هذا الأمر:

#استيراد الوحدة النمطية

يستورد عملية فرعية

# تحديد أمر للعملية الفرعية و

عملية #open باستخدام وظيفة Popen()

انتاج = عملية فرعية . بوبين ( [ 'تاريخ' ] , com.stdout = عملية فرعية . يضخ )

# استرجاع المخرجات والخطأ من خلال التواصل مع العملية

com.stdout , com.stderr = انتاج. يتواصل ( )

#طباعة المخرجات

مطبعة ( com.stdout. فك تشفير ( ) )

انتاج:







يظهر الإخراج التالي بعد تنفيذ البرنامج النصي السابق:



  ص1



اذهب إلى الأعلى





قم بتشغيل أمر باستخدام بيانات الإدخال

يتم استخدام الأمر 'wc' مع الخيار '-c' لحساب إجمالي عدد أحرف قيمة السلسلة المتوفرة مع هذا الأمر. قم بإنشاء ملف Python باستخدام البرنامج النصي التالي الذي يقوم بإنشاء عملية فرعية باستخدام وظيفة Popen() لتشغيل أوامر 'wc –c'. يتم أخذ قيمة السلسلة من الجهاز بعد تنفيذ البرنامج النصي ويتم طباعة إجمالي أحرف سلسلة الإدخال في الإخراج.

#استيراد الوحدة النمطية

يستورد عملية فرعية

# تحديد أمر للعملية الفرعية و

# افتح العملية باستخدام وظيفة Popen ().

انتاج = عملية فرعية . بوبين ( [ 'مرحاض' , '-ج' ] , com.stdout = عملية فرعية . يضخ )

# استرجاع المخرجات والخطأ من خلال التواصل مع العملية

com.stdout , com.stderr = انتاج. يتواصل ( )

#طباعة المخرجات

مطبعة ( com.stdout. فك تشفير ( ) )

انتاج:



يظهر الإخراج التالي لقيمة إدخال 'أمثلة العمليات الفرعية لـ Python':

اذهب إلى الأعلى

قم بتشغيل برنامج بايثون النصي

أنشئ ملف Python باسم 'sum.py' باستخدام البرنامج النصي التالي الذي يحسب مجموع رقمين ويتم توفير هذه الأرقام كوسائط سطر الأوامر:

sum.py

# استيراد الوحدة الضرورية

يستورد sys

# عدد إجمالي الحجج

ن = فقط ( sys . argv )

# أضف أول قيمتين للوسيطة

مجموع = كثافة العمليات ( sys . argv [ 1 ] ) + كثافة العمليات ( sys . argv [ 2 ] )

#طباعة نتيجة الإضافة

مطبعة ( 'مجموع ' + sys . argv [ 1 ] + ' و ' + sys . argv [ 2 ] + ' يكون' , مجموع )

إنشاء بايثون ملف مع البرنامج النصي التالي الذي سيقوم بتشغيل Python ملف اسم الشيئ مجموع . السنة التحضيرية مع وسيطتين عن طريق إنشاء عملية فرعية .

#استيراد الوحدة النمطية

يستورد عملية فرعية

# قم بتشغيل برنامج python النصي في العملية الفرعية و

#افتح العملية باستخدام وظيفة Popen()

انتاج = عملية فرعية . بوبين ( [ 'بيثون3' , 'sum.py' , '25' , '55' ] , com.stdout = عملية فرعية . يضخ ) # استرجاع المخرجات والخطأ من خلال التواصل مع العملية

com.stdout , com.stderr = انتاج. يتواصل ( )

#طباعة المخرجات

مطبعة ( com.stdout. فك تشفير ( ) )

انتاج:

يظهر الإخراج التالي بعد تنفيذ البرنامج النصي السابق:

اذهب إلى الأعلى

`

التعامل مع خطأ العملية الفرعية

قم بإنشاء ملف Python باستخدام البرنامج النصي التالي الذي يعالج أخطاء العملية الفرعية باستخدام كتلة 'المحاولة باستثناء'. يتم أخذ الأمر من المستخدم ويتم تنفيذه بواسطة العملية الفرعية. يتم عرض رسالة الخطأ في حالة أخذ أي أمر غير صالح من المستخدم.

#استيراد الوحدات

يستورد عملية فرعية

يستورد sys

#خذ الأمر من المستخدم

يأمر = مدخل ( 'أدخل أمراً صالحاً:' )

يحاول :

# افتح العملية باستخدام وظيفة Popen ().

انتاج = عملية فرعية . بوبين ( [ يأمر ] , com.stdout = عملية فرعية . يضخ )

# استرجاع المخرجات والخطأ من خلال التواصل مع العملية

com.stdout , com.stderr = انتاج. يتواصل ( )

#طباعة المخرجات

مطبعة ( com.stdout. فك تشفير ( ) )

يستثني :

مطبعة ( 'خطأ:' , sys . معلومات exc_info ( ) )

انتاج:

يظهر الإخراج التالي إذا تم أخذ الأمر 'pwd' كمدخل وهو أمر صالح:

  ص4-1

يظهر الإخراج التالي إذا تم أخذ الأمر 'usr' كمدخل وهو أمر صالح:

  ص4-2

اذهب إلى الأعلى

قم بإرجاع رمز العملية الفرعية.Popen

قم بإنشاء ملف Python باستخدام البرنامج النصي التالي الذي ينفذ أمر 'ls' من خلال العملية الفرعية للحصول على قائمة بجميع ملفات Python من الموقع الحالي. ينتظر البرنامج النصي إكمال العملية الفرعية ويطبع رمز الإرجاع.

#استيراد الوحدات

يستورد عملية فرعية

يستورد sys

#ضبط الأمر

يأمر = [ 'ليرة سورية' , '-ل' , '*.السنة التحضيرية' ]

يحاول :

# افتح العملية باستخدام وظيفة Popen ().

انتاج = عملية فرعية . بوبين ( يأمر , com.stdout = عملية فرعية . يضخ ,

com.stderr = عملية فرعية . يضخ , نص = حقيقي )

#انتظر لإكمال العملية

retCode = انتاج. انتظر ( )

# اطبع رمز الإرجاع

مطبعة ( 'رمز الإرجاع:' , retCode )

يستثني :

#طباعة رسالة خطأ للخطأ

مطبعة ( 'خطأ:' , sys . معلومات exc_info ( ) )

انتاج:

يظهر إخراج مماثل بعد تنفيذ البرنامج النصي السابق:

اذهب إلى الأعلى

إعادة توجيه مخرجات العملية الفرعية إلى الملف

قم بإنشاء ملف Python باستخدام البرنامج النصي التالي الذي يكتب مخرجات العملية الفرعية في ملف نصي. الأمر الذي يتم تنفيذه بواسطة العملية الفرعية مأخوذ من المستخدم.

# وحدة الاستيراد

يستورد عملية فرعية

# تحديد اسم الملف

اسم الملف = 'ملف خارجي.txt'

# خذ أمر ping

كمد = مدخل ( 'أدخل أمر ping:' )

# قم بتقسيم المدخلات المأخوذة بناءً على المساحة

الحجج = كمد . ينقسم ( )

#اكتب إخراج الأمر في الملف

مع يفتح ( اسم الملف , 'في' ) مثل البيانات الخارجية:

عملية = عملية فرعية . بوبين ( الحجج , com.stdout = outdata )

#انتظر حتى تنتهي العملية

رمز الإرجاع = عملية. انتظر ( )

انتاج:

وفقًا للإخراج التالي، فإن 'ping -c 3 www.google.com يتم أخذ الأمر من المستخدم ويتم استخدام الأمر 'cat' لعرض محتوى الملف الذي تكتبه العملية الفرعية:

اذهب إلى الأعلى

المعالجة المتعددة باستخدام Subprocess.Popen

قم بإنشاء ملف Python باستخدام البرنامج النصي التالي حيث يتم عرض استخدام المعالجة المتعددة باستخدام العملية الفرعية. هنا، يتم استدعاء الدالة المسماة Display_msg() عدة مرات باستخدام المعالجة المتعددة.

# استيراد الوحدات الضرورية

يستورد معالجة متعددة

يستورد عملية فرعية

# تحديد الوظيفة التي سيتم استدعاؤها عن طريق المعالجة المتعددة

مواطنه Display_msg ( ن ) :

#حدد الأمر باستخدام الدالة format()

كمد = 'صدى برمجة بايثون' . شكل ( ن )

# افتح العملية باستخدام وظيفة Popen ().

عملية = عملية فرعية . بوبين ( كمد , صدَفَة = حقيقي , com.stdout = عملية فرعية . يضخ )

# استرجاع المخرجات والخطأ من خلال التواصل مع العملية

com.stdout , خطأ = عملية. يتواصل ( )

#طباعة المخرجات

مطبعة ( com.stdout. فك تشفير ( ) )

# استدعاء الوظيفة 5 مرات عن طريق إنشاء المعالجة المتعددة.Pool

مع المعالجة المتعددة. حمام سباحة ( المعالجة المتعددة. cpu_count ( ) ) مثل النائب:

# خريطة الوظيفة

النائب. خريطة ( Display_msg , يتراوح ( 1 , 5 ) )

انتاج:

يظهر الإخراج التالي بعد تنفيذ البرنامج النصي السابق:

اذهب إلى الأعلى

التعامل مع تيارات الإدخال والإخراج

قم بإنشاء ملف نصي باسم 'test.txt' بالمحتوى التالي قبل إنشاء برنامج Python النصي لهذا المثال.

test.txt

بيرل

بيثون

سحق

بي أتش بي

قم بإنشاء ملف Python باستخدام البرنامج النصي التالي الذي يستخدم عملية فرعية واحدة لقراءة محتوى ملف 'test.txt' وعملية فرعية أخرى للبحث عن كلمة معينة في هذا الملف النصي. وهنا يتم البحث عن كلمة “python” في “ملف test.txt” الذي يحتوي على هذه الكلمة.

#استيراد الوحدات

يستورد عملية فرعية

# تحديد عملية لدفق الإدخال

تحت المعالجة = عملية فرعية . بوبين ( [ 'قطة' , 'اختبار.txt' ] , com.stdout = عملية فرعية . يضخ , نص = ترو > # تحديد عملية لدفق الإخراج

out_process = عملية فرعية . بوبين (

[ 'سيطرة' , 'بيثون' ] , com.stdin = تحت المعالجة. com.stdout ,

com.stdout = عملية فرعية . يضخ , نص = حقيقي )

# تخزين مخرجات عمليات الإدخال والإخراج

انتاج , _ = out_process. يتواصل ( )

#طباعة المخرجات

مطبعة ( 'انتاج:' , انتاج )

انتاج:

يظهر الإخراج التالي بعد تنفيذ البرنامج النصي:

اذهب إلى الأعلى

التحكم في العملية الفرعية باستخدام جهاز ضبط الوقت

قم بإنشاء ملف Python باستخدام البرنامج النصي التالي الذي يستخدم مؤقتًا لتنفيذ أمر باستخدام عملية فرعية. هنا، يتم استخدام كتلة 'محاولة باستثناء' لبدء تشغيل المؤقت، ويتم استخدام كتلة 'أخيرًا' لإلغاء المؤقت.

# استيراد وحدة العملية الفرعية

يستورد عملية فرعية

# استيراد وحدة المؤقت

من خيوط يستورد الموقت

#تعريف الأمر

كمد = [ 'بينغ' , 'www.example.com' ]

#افتح العملية

ص = عملية فرعية . بوبين (

كمد , com.stdout = عملية فرعية . يضخ , com.stderr = عملية فرعية . يضخ )

#تعريف الموقت

مؤقت = الموقت ( 2 , لامدا عملية: عملية. قتل ( ) , [ ص ] )

يحاول :

#بدء الموقت

مؤقت. يبدأ ( )

#قراءة الإخراج

com.stdout , _ = ص. يتواصل ( )

#طباعة الإخراج

مطبعة ( com.stdout. فك تشفير ( ) )

يستثني :

#طباعة رسالة خطأ للخطأ

مطبعة ( 'خطأ:' , sys . معلومات exc_info ( ) )

أخيراً :

#أوقف المؤقت

مؤقت. يلغي ( )

انتاج:

يظهر الإخراج التالي بعد تنفيذ البرنامج النصي:

اذهب إلى الأعلى

قراءة مدخلات الدفق

قم بإنشاء ملف Python الذي يقرأ محتوى مخرجات العملية الفرعية باستخدام حلقة 'أثناء' ثم قم بتخزين المحتوى في متغير. تتم طباعة محتوى هذا المتغير لاحقًا. هنا، يتم استخدام الأمر 'curl' في العملية الفرعية لـ www.google.com عنوان URL.

# وحدة الاستيراد

يستورد عملية فرعية

#تعريف الأمر

كمد = [ 'لفة' , 'www.example.com' ]

ص = عملية فرعية . بوبين ( كمد , com.stdout = عملية فرعية . يضخ ,

com.stderr = عملية فرعية . يضخ , نص = حقيقي >

# تهيئة متغير الإخراج

انتاج = ''

بينما حقيقي :

# اقرأ إخراج العملية سطرًا تلو الآخر

ln = ص. com.stdout . readline ( )

# إنهاء من الحلقة عند انتهاء العملية الفرعية

لو لا قانون الجنسية:

استراحة

انتاج = الإخراج + قانون الجنسية

#طباعة السطر

مطبعة ( انتاج )

#الحصول على رمز الإرجاع بعد الانتهاء من العملية

رمز الإرجاع = ص. انتظر ( )

# اطبع رمز الإرجاع

مطبعة ( 'رمز الإرجاع: ' , رمز الإرجاع )

انتاج:

يظهر الجزء الأخير من المخارج الثلاثة في الصورة التالية. رمز الإرجاع بعد إكمال العملية الفرعية هو 0:

اذهب إلى الأعلى

خاتمة

يتم عرض الاستخدامات المختلفة لعملية Python الفرعية.Popen() في هذا البرنامج التعليمي باستخدام نصوص Python المتعددة التي ستساعد مستخدمي Python على معرفة الاستخدامات الأساسية لهذه الوظيفة.