PracticU

process

בלי כתוביותעם כתוביות
PracticU › קורס פייתון - Python › process
מילון מושגים:
תהליך - מופע של תוכנה שרצה בזיכרון, עם הקוד, הנתונים והמשאבים שהוקצו לה על ידי מערכת ההפעלה.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
מאפיין - תכונה שמצמידים לרכיב ומתארת אותו או את התנהגותו, למשל מאפיין של תגית HTML או שדה באובייקט.
Ping - פקודה שבודקת אם מכשיר ברשת מגיב ומודדת את זמן התגובה אליו.
מעטפת - תוכנה שמפרשת פקודות של המשתמש ומעבירה אותן למערכת ההפעלה, למשל Bash או PowerShell.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.

process
בשיעור נלמד איך מפעילים תוכנה או פקודה חיצונית מתוך פייתון, ואיך קוראים את הפלט שלה ואת קוד היציאה.
השלבים העיקריים
1. os.system: מריצה פקודה ומדפיסה את הפלט למסך. הערך שהיא מחזירה הוא קוד היציאה, ולכן אי אפשר לקרוא את הפלט מתוך התוכנית.
2. מודול commands: מאפשר לקבל את הפלט והסטטוס בעזרת getoutput, אבל לא מחזיר את פלט השגיאה. זו שיטה פשוטה ולא מלאה.
3. subprocess.Popen: הדרך המסודרת. מגדירים את הפקודה, ומפנים את stdout ואת stderr לתוך PIPE, כדי לקבל אותם בתוך התוכנית.
4. communicate: קורא את הפלט עד שהתוכנה מסתיימת, ומחזיר את stdout ואת stderr. אם התוכנה מבקשת קלט, מעבירים לה אותו בפרמטר של communicate.
5. קוד היציאה: המאפיין returncode מחזיר 0 כשהפקודה הצליחה, וערך אחר כשנכשלה.
6. עיבוד הפלט: מפצלים את הפלט לשורות ובודקים שורות מסוימות, למשל שורות שמתחילות ב-Reply. אחר כך שולפים את הזמן בעזרת פיצול או ביטוי רגולרי.
7. שליטה בתהליך: wait מחכה לסיום, poll בודק אם הסתיים, ו-terminate ו-kill עוצרים אותו.
פקודות והגדרות
- subprocess.Popen("ping google.com", shell=True, stdout=PIPE, stderr=PIPE)
- out, err = p.communicate()
- p.returncode
טעויות נפוצות
- os.system לא מחזיר את הפלט, ולכן לא מתאים לעיבוד.
- ב-communicate הפלט מגיע כבייטים או כמחרוזת לפי הגרסה, ולכן צריך לוודא את הסוג לפני פיצול.
- פקודת ping לוקחת זמן, ולכן התוכנית תחכה לה בזמן ההרצה.
שימו לב
להפעיל תוכנה חיצונית ולעבד את התוצאה זה תהליך שכדאי לבנות על subprocess בלבד, כשמבינים את הפלט והקוד שחוזר.
השיעור הבא בקורס: RegEx in Python

פרקי ההרצאה: process

  1. 00:00

    הרצת תוכנות ופקודות מתוך פייתון

  2. 00:43

    os.system והחזרת קוד היציאה

  3. 01:35

    subprocess.Popen לקבלת הפלט

  4. 03:00

    שליחת סיסמה לתוכנה אינטראקטיבית

  5. 03:37

    הרצת dir ועיבוד הפלט במשתנה

  6. 04:20

    הרצת פקודת ping והמתנה לתוצאה

תמלול ההרצאה: process

הטקסט המלא של הדקות הראשונות בהרצאה «process» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

    שלום לכולם, בשיעור הזה אנחנו נדבר על איך להעריץ פרוסס בפייתון. כשאני מתכוון בפרוסס, אני אומר להעריץ כל תוכנה, כמו להעריץ איזשהו קובץ אחר, להערים תוכנה כמו מחשבון, או להעריץ פקודה כמו דיר או פינג דרך תוכנת פייתון שלנו ולקבל את התוצאות.

  2. 00:24

    אז פעם היו, פעם וגם היום, יש כמה דרכים להעריץ בפייתון. הדרך הכי פשוטה אולי זה לעשות us.system הדבר הזה הוא הדרך הכי פשוט, אתה מביא לו פשוט את הסטרינג שאתה רוצה להריץ, נגיד במקרה שלנו דיר, הוא מדפיס ל-stdout את התוצאה ומחזיר לך האם התוצאה, האם הפקודה נכשלה או הצליחה, הוא מחזיר בעצם את הערך קבלה של הפקודה,

  3. 00:57

    אז a אז דיר הצליחה ולכן מוחזר לנו 0 וזה מוחזר למסך אבל זה פחות מועיל כי אין לנו את ההדפסות. דרך עוד אופציה, מודול שהוא באמת quick and dirty כזה, מודול שנקרא commands, יש לנו פה באמת get output, לקבל את ה-output ולקבל

  4. 01:20

    את ה-output והסטטוס, אבל פה אנחנו לא מקבלים למשל את ה-std error. אז בסופו של דבר בפייתון החליטו לעשות סדר בקהילה, ויצרו מודול אחד שנקרא sub process.

  5. 01:34

    sub process, הפונקציה הכי שימושית שם זה popen. אז בואו נראה איך אנחנו משתמשים בה: p=subprocess.popen, פה אנחנו אומרים את הפקודה שאנחנו רוצים להריץ, נגיד דיר.

  6. 01:52

    עכשיו, בגלל שזאת פקודה שרצה בשל, אז צריך לכתוב של שווה true. עכשיו, אם אנחנו רוצים לכתוב משהו ל-stdout של האפליקציה ולקבל את ה... ול-std-error שלה, אז צריך לכתוב גם את הדבר הזה, std-error שווה ל-subprocess.pip.

  7. 02:19

    ואותו דבר צריך לעשות גם ל-std-in ול-std-out, std שווה לזה ולפייפ ו std error std out גם שווה לזה לאחר שעשינו את הדבר הזה אנחנו יכולים לעשות פשוט out r שווה לp.communicate כאשר פה זה האינפוט למשל אם יש לנו תוכנה שעושה אינטראקציה נגיד התוכנה אולי מבקשת סיסמה אז אנחנו פשוט כותבים

  8. 03:00

    פה את הסיסמה ופה אנחנו למשל פסוורד ופה פה אנחנו מקבלים חזרה את ה-STD-OUT ואת ה-STD-ERROR ומזה אנחנו יכולים להבין האם הצלחנו להיכנס למערכת או לא הצלחנו להיכנס למערכת ולפי זה להמשיך ברצף של התוכנית.

  9. 03:17

    אני חייב רק לזרוק שאם אתם באמת רוצים לעשות משהו כזה לתקשור עם פרוסס אז יש מודולים ברמה יותר גבוהה אחד מהם הוא נקרא נגיד PECSPECT הוא חינמי והרבה יותר מומלץ מלהשתמש בסאב פרוסס אבל בואו באמת נתחיל מהדברים האלה אז אנחנו לא שולחים שום דבר לדיר, אלא פשוט עושים דיר, ואז עושים פרינט לאאוט.

  10. 03:42

    בואו נריץ את זה. הנה, הרצנו את דיר, ובאמת, הפעם קיבלנו את זה לתוך משתנה, אז אני יכול גם לעשות לו פרוססינג ולהתייחס אליו.

  11. 03:53

    מה קורה אם אני רוצה לעשות דיר לאיזושהי תיקייה מסוימת? אז, dier של c.2/Python27 ויש לנו פה בעצם את מה שיש ב-c ו-Python27.dlls.doc וכו'.

  12. 04:20

    ככה מריצים פקודה. בואו למשל נריץ פינג פשוט לגוגל נקודה קום, וזה לקח שנייה וחצי, אבל כי הפקודה פינג לוקחת.

לקורס המלא: קורס פייתון אונליין למתחילים

ההרצאה הקודמת: generators

ההרצאה הבאה: RegEx in Python

הרצאות קשורות מקורסים אחרים

  • הזרקה Process Injection - חלק 1

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס PHP - פרויקט מעשי