recent
أخبار ساخنة

التعرف على مكتبة subprocess في بايثون Python الدرس | 16 |

الصفحة الرئيسية

مكتبة subprocess

الـ subprocess هي module او مكتبة موجودة لدينا في بايثون تمكننا من التعامل مع سطر الأوامر command line لرؤية stdout و stderr وهي مهمة جداً جداً و سوف نتعامل معها في السكيورتي و في الشبكات.

مثال 1
ننشأ ملف بايثون مثلاً على سطح المكتب بإسم subprocess_.py ونكتب بداخله

from subprocess import PIPE , Popen
p = Popen  ("tasklist",stdout=PIPE,stderr=PIPE,shell=True)
print(p.communicate()[0])

شرح المثال السابق

قلنا بالمثال انه لدينا process و استخدمنا به Popen وأخذ مننا بعض الارجيومنت و اولها tasklist الذي هو موجود لدينا ضمن النظام و ثانيا stdout و ثالثاً الخطأ stderr اذا وجد خطأ و الـ shell يساوي True ,وهذه من الاساسيات في الـ process ,و بعدها لرؤية النتيجة استخدمنا p.communicate سيعرض لنا Tuple عنصرين لا اكثر , الاول stdout ,والثاني stderr .
نشغل الامر بـ cmd الآن لنرى النتيجة 


اما اذا استخدمنا امر غير موجود لدينا في السيستم كالتالي
from subprocess import PIPE , Popen
p = Popen  ("tasklist",stdout=PIPE,stderr=PIPE,shell=True)
print(p.communicate()[0])

عند التشغيل لن يعرض لنا اي شيئ لأن الامر غير موجود , و اذا نريد عرض الرساله غير موجود نستخدم نغير بدل الـ 0 نضعها 1 لعرض الاخطاء كالتالي
from subprocess import PIPE , Popen
p = Popen  ("lskd",stdout=PIPE,stderr=PIPE,shell=True)
print(p.communicate()[1])

سيعطينا النتيجة التالية 


اذا نريد ان تعرض النتيجة بشكل منتظم نستخدم كالتالي بملفنا
from subprocess import PIPE , Popen
p = Popen  ("tasklist",stdout=PIPE,stderr=PIPE,shell=True)
print(p.communicate()[0].decode("utf-8"))
ستكون النتيجة نفسها لكن بشكل مرتب .
google-playkhamsatmostaqltradent