في هذا البرنامج التعليمي سنتعلم عن أمر النظام في بايثون. سبق لنا أن تعلمنا عن أرقام عشوائية في بايثون.
أمر النظام في بايثون
عند كتابة برنامج في بايثون، قد تحتاج إلى تنفيذ بعض الأوامر الخاصة بالشل. على سبيل المثال، إذا استخدمت بيئة التطوير Pycharm
، فقد تلاحظ أن هناك خيارًا لمشاركة مشروعك على جيت هاب. وربما تعلم أن نقل الملفات يتم عن طريق جيت، الذي يتم تشغيله باستخدام سطر الأوامر. لذا، يقوم برنامج Pycharm بتنفيذ بعض الأوامر الخاصة بالشل في الخلفية للقيام بذلك. ومع ذلك، سنتعلم في هذا البرنامج التعليمي بعض الأساسيات حول تنفيذ أوامر الشل من كود بايثون الخاص بك.
وظيفة os.system() في بايثون
يمكننا تنفيذ أمر النظام باستخدام وظيفة os.system(). وفقًا للمستندات الرسمية، قد تم القول أنه
يتم تنفيذ ذلك عن طريق استدعاء وظيفة البرنامج القياسية system()، وله نفس القيود.
ومع ذلك، إذا كان الأمر يولد أي إخراج، فإنه يتم إرساله إلى تيار الإخراج القياسي للمترجم. عدم توصية باستخدام هذا الأمر. في الكود التالي سنحاول معرفة إصدار جيت باستخدام أمر النظام git --version
.
import os
cmd = "git --version"
returned_value = os.system(cmd) # returns the exit code in unix
print('returned value:', returned_value)
تم العثور على الإخراج التالي في أوبونتو 16.04 حيث تم تثبيت جيت بالفعل.
git version 2.14.2
returned value: 0
لاحظ أننا لا نقوم بطباعة إخراج أمر إصدار جيت إلى وحدة التحكم، بل يتم طباعته لأن وحدة التحكم هي تيار الإخراج القياسي هنا.
وظيفة Python subprocess.call()
في القسم السابق، رأينا أن وظيفة os.system()
تعمل بشكل جيد. ولكنها ليست الطريقة الموصى بها لتنفيذ أوامر الشيل. سنستخدم وحدة Python subprocess لتنفيذ أوامر النظام. يمكننا تشغيل أوامر الشيل باستخدام وظيفة subprocess.call()
. انظر إلى الكود التالي الذي يعادل الكود السابق.
import subprocess
cmd = "git --version"
returned_value = subprocess.call(cmd, shell=True) # returns the exit code in unix
print('returned value:', returned_value)
وسيكون الإخراج نفسه أيضًا.
وظيفة Python subprocess.check_output()
حتى الآن، قمنا بتنفيذ أوامر النظام بمساعدة البايثون. ولكننا لم نتمكن من التلاعب بالناتج الذي تنتجه تلك الأوامر. باستخدام الدالة subprocess.check_output()
يمكننا تخزين الناتج في متغير.
import subprocess
cmd = "date"
# يعيد الناتج كسلسلة بايت
returned_output = subprocess.check_output(cmd)
# باستخدام دالة decode() لتحويل سلسلة البايت إلى سلسلة نصية
print('Current date is:', returned_output.decode("utf-8"))
سينتج مخرجات مثلما فيما يلي
Current date is: Thu Oct 5 16:31:41 IST 2017
لذا، في الأقسام السابقة، ناقشنا أفكارًا أساسية حول تنفيذ أوامر نظام Python. ولكن ليس هناك حد في التعلم. إذا كنت ترغب، يمكنك معرفة المزيد حول أمر نظام Python باستخدام وحدة subprocess من الوثائق الرسمية.
Source:
https://www.digitalocean.com/community/tutorials/python-system-command-os-subprocess-call