لغة بايثون، تلك اللغة الصاعدة التي بدأت تشق طريقها في عالم برمجة التطبيقات والويب، مستفيدة من مميزاتها المتمثلة في سهولة كتابتها وقراءتها، ووضوح عباراتها وخلوها من التعقيد الزائد، مع قوة كبيرة في الأداء توفرها له مجموعة ممتازة من المكتبات البرمجية التي تؤدي كثيرا من العمل بعبارات مختصرة وواضحة.
اتكلم اليوم عن كيفية تشغيل برنامج خارجي من خلال بايثون.
يتم ذلك عن طريق استدعاء المكتبة الرئيسية os ، والتي تحوي بدورها مجموعة من الوظائف الخاصة بالتعامل مع نظام التشغيل الذي يعمل عليه بايثون (لينوكس، ويندوز ... وماشابه).
أحد هذه الوظائف يدعي popen4، يمكن من خلاله تشغيل أي برنامج سبق تنصيبه على نظام التشغيل من خلال تمرير مساره إليه، على سبيل المثال لتشغيل برنامج فايرفوكس على نظام لينوكس (بافتراض انه منصب مسبقا)، نفتح نافذة سطر الاوامر (كونسول) ونكتب الاوامر التالية:
وهنا ستلاحظ بدء تشغيل برنامج فايرفوكس، تماما كما لو كنت تستدعيه من خلال سطر الاوامر الاعتيادي.
ونفس الشيء يصح مع نظام تشغيل ويندوز
هذا يشغل برنامج نوتباد المرفق مع ويندوز، او بامكانك استخدام الصيغة التالية:
لتشغيل برنامج آخر على النظام بإعطاء المسار الكامل للملف التشغيلي.
إلى هذا الحد تبدو فائدة هذه الوظيفة محدودة ومشابهة لملفات الباتش، او اختصارات سطح المكتب !!ولكن بقليل من التأمل تستطيع اكتشاف قابلياته الكبيرة من خلال استخدامه مع العمليات المختلفة الاخرى في بايثون.
فلنتفترض على سبيل المثال انك تملك ملفا نصيا فيه مائة رابط لملفات موجودة على النت، صور او برامج او ملفات فيديو كما تشاء، وكل رابط موضوع على سطر كما ترى هنا:
مانحتاجه الآن لكتابة برنامج يقوم بتنزيل هذه الملفات من الانترنت تباعا هو قراءة هذا الملف النصي أولاً، ثم تمرير هذه العناوين واحدا تلو الآخر الى أحد البرامج المختصة بتنزيل الملفات، كبرنامج wget المميز.
هكذا سيبدو برنامجنا بصيغته النهائية:
بافتراض ان الملف النصي يقع على نفس مسار برنامجنا هذا، او كتابة المسار الكامل للملف كاختيار ثاني.
في حالة وجود ذاكرة رام صغيرة على جهازك قد تصادفك بعض المشاكل في استمرار التنزيل، عندما يكون عدد الملفات المطلوب تنزيلها بآن واحد كبيرا !!
يمكن تجاوز هذا الاشكال من خلال تمرير عدد محدود من الروابط لتنزيلها في كل مرة على شكل وجبات، أو وضع مؤقت زمني في ايعاز wget يقوم بالانتظار لفترة زمنية وجيزة قبل اجراء عملية تنزيل الملف التالي كما ترى هنا على سبيل المثال:
هنا سيقوم برنامجنا بوضع فترات انتظار زمنية مقدارها ثانيتين بين كل عمليتي تنزيل، ويمنع انهيار البرنامج بسبب انخفاض موارد الجهاز.
شكرا للمتابعة
اتكلم اليوم عن كيفية تشغيل برنامج خارجي من خلال بايثون.
يتم ذلك عن طريق استدعاء المكتبة الرئيسية os ، والتي تحوي بدورها مجموعة من الوظائف الخاصة بالتعامل مع نظام التشغيل الذي يعمل عليه بايثون (لينوكس، ويندوز ... وماشابه).
أحد هذه الوظائف يدعي popen4، يمكن من خلاله تشغيل أي برنامج سبق تنصيبه على نظام التشغيل من خلال تمرير مساره إليه، على سبيل المثال لتشغيل برنامج فايرفوكس على نظام لينوكس (بافتراض انه منصب مسبقا)، نفتح نافذة سطر الاوامر (كونسول) ونكتب الاوامر التالية:
كود PHP:
$python
>>>import os
>>>os.popen4('firefox')
ونفس الشيء يصح مع نظام تشغيل ويندوز
كود PHP:
>>>import os
>>>os.popen4('notepad')
كود PHP:
>>>import os
>>>os.popen4(r'C:\program files\adobe\adobeacrobat.exe')
إلى هذا الحد تبدو فائدة هذه الوظيفة محدودة ومشابهة لملفات الباتش، او اختصارات سطح المكتب !!ولكن بقليل من التأمل تستطيع اكتشاف قابلياته الكبيرة من خلال استخدامه مع العمليات المختلفة الاخرى في بايثون.
فلنتفترض على سبيل المثال انك تملك ملفا نصيا فيه مائة رابط لملفات موجودة على النت، صور او برامج او ملفات فيديو كما تشاء، وكل رابط موضوع على سطر كما ترى هنا:
كود PHP:
link_list.txt
http://www.homepage1.com/images/pic1.jpg
http://www.homepage1.com/images/pic2.gif
http://www.homepage2.com/images/movie.avi
http://www.homepage3.com/images/ebook.pdf
.
.
.
.
.
مانحتاجه الآن لكتابة برنامج يقوم بتنزيل هذه الملفات من الانترنت تباعا هو قراءة هذا الملف النصي أولاً، ثم تمرير هذه العناوين واحدا تلو الآخر الى أحد البرامج المختصة بتنزيل الملفات، كبرنامج wget المميز.
هكذا سيبدو برنامجنا بصيغته النهائية:
كود PHP:
#pyDownloader.py
import os
f = file('link_list.txt','r')
r = f.readline()
for link in r:
os.popen4(r'wget -c '+link)
f.colse()
في حالة وجود ذاكرة رام صغيرة على جهازك قد تصادفك بعض المشاكل في استمرار التنزيل، عندما يكون عدد الملفات المطلوب تنزيلها بآن واحد كبيرا !!
يمكن تجاوز هذا الاشكال من خلال تمرير عدد محدود من الروابط لتنزيلها في كل مرة على شكل وجبات، أو وضع مؤقت زمني في ايعاز wget يقوم بالانتظار لفترة زمنية وجيزة قبل اجراء عملية تنزيل الملف التالي كما ترى هنا على سبيل المثال:
كود PHP:
os.popen4(r'wget -c -P -w 2 '+link)
شكرا للمتابعة
تعليق