במדריך זה נלמד על פקודת מערכת Python.
פקודת מערכת Python
בעת כתיבת תוכנית בפייתון, ייתכן ותצטרך לבצע פקודות של מערכת בשביל התוכנית שלך. לדוגמה, אם אתה משתמש ב- Pycharm
IDE, ייתכן שתשים לב שישנה אפשרות לשתף את הפרויקט שלך ב- GitHub. ואתה כנראה יודע שהעברת קבצים נעשית על ידי git, שמתבצע באמצעות שורת פקודה. לכן, Pycharm מפעילה פקודות מערכת ברקע כדי לבצע את זה. בכל מקרה, במדריך זה נלמד על יסודות כיצד להריץ פקודות מערכת מתוך הקוד שלך בפייתון.
פונקציית os.system() של Python
ניתן להריץ פקודות מערכת באמצעות השימוש בפונקציה os.system(). על פי המסמך הרשמי, נאמר כי
מימוש זה מתבצע על ידי קריאה לפונקציה הסטנדרטית C system(), ויש לו את אותם ההגבלות.
אך, אם הפקודה גורמת להפלטה כלשהי, היא נשלחת לפלט הסטנדרטי של האינטרפרטטור. שימוש בפקודה זו אינו מומלץ. בקטע הקוד הבא ננסה לקבוע את גרסת Git באמצעות פקודת המערכת git --version
.
import os
cmd = "git --version"
returned_value = os.system(cmd) # returns the exit code in unix
print('returned value:', returned_value)
התוצאה הבאה נמצאת ב־ubuntu 16.04 כאשר Git מותקן כבר.
git version 2.14.2
returned value: 0
שימו לב שאנו לא מדפיסים את פלט פקודת הגרסה של Git למסוף, הוא מודפס מכיוון שהמסוף הוא פלט הסטנדרטי כאן.
פונקציית Python subprocess.call()
בחלק הקודם, ראינו שפונקציית os.system()
פועלת בצורה תקינה. אך זו אינה הדרך המומלצת לביצוע פקודות shell. נשתמש במודול Python subprocess כדי לבצע פקודות מערכת. ניתן להריץ פקודות shell באמצעות פונקציית 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
לכן, באיזורים הנ"ל דנו ברעיונות בסיסיים על ביצוע פקודות מערכת בפייתון. אך אין סופי ללמידה. אם תרצה, תוכל ללמוד עוד על פקודת מערכת בפייתון בעזרת מודול subprocess מתוך תיעוד הרשמי.
Source:
https://www.digitalocean.com/community/tutorials/python-system-command-os-subprocess-call