כיצד להחליף את Bash בפייתון כשפת שורת הפקודה שלך

יש לי יחסי אהבה ושנאה קצת עם באש. אני מבלה זמן רב בטרמינל, ובאס היא "שפת התכנות" המוגדרת כברירת מחדל. לפעמים אני אומר לאנשים שמוצאים, grep ו- xargs מנהלים את התשתית שלהם, והם צוחקים וצוחקים עד שהם מבינים שאני רציני.

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

find $(pwd) -name "*.txt" | xargs -I {} echo "do stuff with {}"

הגיע הזמן לפרוץ את הפיתון!

יש הרבה יתרונות לשימוש בפייתון כשפה שלך לשפת הפקודה.

  • לפייתון יש המון ספריות נחמדות שיעזרו לך כמעט בכל דבר. זה כולל טיפול בפעולות מערכת, קריאת קבצים, רישום ספריות, כתיבה לולאות, בדיקת קודי יציאה וכן הלאה.
  • השלמה אוטומטית עם מזהי IDE. ברצינות. מי רוצה שיהיה צורך לשנן משהו?
  • חבילת בדיקות חזקה אם זה הדבר שלך (ואם זה לא, כדאי לשקול להפוך את הדבר שלך).
  • קונסולת ה- iPython. זה נפלא. זה מדהים. אני אוהב את זה.
  • Python זמין ברוב המערכות, ואם זה לא אתה יכול להשיג את זה עם Miniconda.
  • בדיקת שגיאות איתנה עם חסימות ניסיון.
  • אם אתה עובד על מערכות הפעלה שונות אתה יכול להשתמש בספריות Python שיטפלו בכל מה שמתחת למכסה המנוע.
  • גם אם אין לך יכולת תכנות פייתון היא שפה קלה להתחיל איתה.

בוא נתחיל

כדי להתחיל, ראשית יהיה עליך להתקין את Python או להתקין אותו עם Miniconda.

בדוק אם התקנת את ה- iPython

which python which ipython 

אם שני אלה מצליחים, אתה בעסק! אם יש לך Python, אך לא iPython, תצטרך להתקין אותו. אתה יכול להתקין את זה כחבילת מערכת, אבל אני ממש ממליץ לך להתקין אותו רק עם Miniconda.

התקן את Miniconda

תפוס את תוכנית ההתקנה של מערכת ההפעלה שלך כאן. אני מציע לקבל את ההתקנה של Python3.

ואז זו פשוט התקנה פשוטה.

bash Miniconda3-latest-Linux-x86_64.sh 

עקוב אחר ההנחיות ותתקין את Miniconda3. ברגע שהתקנת אותו תרצה להריץ עדכון, כי זה טכנולוגי וכמובן שאתה רוצה להריץ עדכון. ;-)

conda update conda conda config --add channels conda-forge conda update -y --all conda install -y ipython 

פתרון תקלות

אם אתה מתקשה להתקין חבילות כלשהן, הנה כמה טיפים.

  • רוץ conda clean --allונסה שוב.
  • ודא שאתה משתמש בערוץ הנכון.
  • לָרוּץ conda update -y --all
  • נסה להתקין כמה שפחות במרחב הקונדה העולמי שלך. במקום ליצור סביבות למשימות ופרויקטים שונים, אליהם ניכנס בהמשך.

צור סביבות עם Conda

אם השתמשת אי פעם בווירטואנב, פיפנב (זה דבר?), רבנב, פלנייב, anyenv או כל אחד מהקווינים השונים האחרים שצצו לאורך השנים, זה יישמע לך מוכר מאוד. הרעיון הוא שלפרויקטים שונים יהיו סביבות תוכנה מבודדות משלהם.

conda create -n my-project ipython package1 package2 package2 

אם אתה כמוני ורוצה שיהיה לך iPython זמין, הקפד להתקין אותו לכל סביבה חדשה!

ספריות פייתון לניהול מערכת

לפני שנכנס לדוגמאות בואו נפרט כמה חבילות שימושיות יחד עם המסמכים שלהם.

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

החבילה השנייה שלי להפעלת פקודות מערכת שאינן קיימות כספריות פיתון שימושיות היא מודול תת התהליך.

ל- shutil פעולות קבצים שאינן בספריית os.

ספריית ה- pprint מדפיסה מבני נתונים מורכבים עם כניסה יפה.

ספריית pytest מאפשרת לכם לבדוק את קוד הפיתון שלכם, כי בואו נודה בזה, שום דבר לעולם לא עובד כראוי בפעמים הראשונות (המעטות).

כיצד אוכל לבצע את הקוד שלי?

סוף סוף! קוד!

צילום מסך -2019-12-13-10.33.52

כשאתה משתמש בפייתון לניהול מערכת אתה יכול לצלול ישר למסוף ה- iPython, או לכתוב סקריפטים ואז לבצע אותם באמצעות python name-of-script.py.

אם אתה מעדיף לכתוב את התסריטים שלך יש לך כל כך הרבה אפשרויות, וזה באמת עניין של העדפה אישית. אני משתמש ב- PyCharm, שמשלמים בתשלום, אך קוד Visual Studio ו- Atom הם בחירות חופשיות מצוינות באותה מידה.

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

אם אתה משתמש במסוף ה- iPython או באחד מהעורכים שציינתי לעיל, תהיה לך השלמה אוטומטית. השלמה אוטומטית מדהימה! עם iPython פשוט התחל להקליד את הפונקציה שלך ולחץ על tab כדי לקבל רשימה של פונקציות פוטנציאליות שתרצה.

צילום מסך -2019-12-13-10.49.07

אני לא יכול להביע עד כמה אני אוהב השלמה אוטומטית. ;-)

תקבל עזרה

אתה יכול ללכת לכל אחד מדפי המסמכים של כל ספריה, אבל אם אתה יודע את השם של הספרייה או את הפונקציה אתה יכול להעלות אותה ב- iPython.

צילום מסך -2019-12-13-10.55.14

צילום מסך -2019-12-13-10.55.55

You can bring up the help menu in most IDEs and text editors too, but that will be specific to your editor.

Examples

First you will need to import your packages

import os import subprocess import shutil from pprint import pprint 

Here are some examples of common file and directory operations.

# Get your current working directly # This returns a string my_cwd = os.getcwd() print(my_cwd) 
# List the contents of a directory # This returns a list dir_list = os.listdir() for item in dir_list: print(item) 
# Get the Absolute Path name of a file (file + current working dir) os.path.abspath('some-file') 
#Get the basename - returns file os.path.basename('/path/to/file') 
# Split a directory path - platform independent os.path.split(os.getcwd()) # Out[17]: ('/Users', 'jillian') 
# Check if a path exists os.path.exists('/path/on/filesystem') 
# Check if a path is a symlink os.path.islink() 

Move files and directories around

# Copy a directory # cp -rf shutil.copytree('src', 'dest') 
# Copy a file # cp -rf shutil.copyfile('file1', 'file2') 
# Move a directory # mv shutil.move('src', 'dest') 

Not everything is going to be available through python libraries, such as installing system libraries, so run a few system commands!

# Run an arbitrary system command command = "echo 'hello'" result = subprocess.run(command.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE) #Print the stdout and stderr print(result.stdout) print(result.stderr) 

Write to files!

# Write to a file (and create it if it doesn't exist) # echo "hello" > hello.txt f= open("hello.txt","w+") f.write("hello!") f.close() 
# Append to a file # echo "hello" >> hello.txt f = open("hello.txt", "a+") f.write("hello again!") f.close() 

Write some tests!

Tests mostly work by using a function called assert, which is essentially saying make sure this is true and if not die loudly.

def test_system_command(): """Test the exit code of a system command""" command = "echo 'hello'" result = subprocess.run(command.split(' '), stdout=subprocess.PIPE) assert result.returncode == 0 

Put this function in a file called test_my_code.py and run as pytest test_my_code.py.

Wrap Up

That's it for my main tips and tricks for using Python as your go-to bash replacement. The next time you need to write a loop in bash, consider breaking out the iPython console and seeing what you can come up with instead!