كيفية استبدال Bash ب Python كلغة Go-To Command Line

لدي علاقة حب وكره مع باش. أقضي الكثير من الوقت في Terminal ، و bash هي "لغة البرمجة" الافتراضية لدي. أحيانًا أخبر الأشخاص الذين يجدون أن grep و xargs يديرون بنيتهم ​​التحتية ، ويضحكون ويضحكون حتى يدركوا أنني جاد.

يعد اختيار بعض بايثون خيارًا مثاليًا لمسؤولي النظام. إنه أمر رائع أيضًا لأي شخص يتعين عليه التعامل مع أي شيء في الجهاز ولكن لا يريد استخدام bash ، أو لديه احتياجات معقدة للغاية بالنسبة لـ bash. بمجرد أن تتجاوز المهمة

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

حان الوقت لاختراق بايثون!

هناك الكثير من الفوائد لاستخدام Python في الانتقال إلى لغة سطر الأوامر.

  • يوجد في Python الكثير من المكتبات الرائعة للمساعدة في أي شيء تقريبًا. يتضمن ذلك التعامل مع عمليات النظام ، وقراءة الملفات ، وإدراج الدلائل ، والكتابة للحلقات ، والتحقق من أكواد الخروج ، وما إلى ذلك.
  • الإكمال التلقائي مع IDEs. بجدية. من يريد أن يحفظ أي شيء؟
  • مجموعة اختبار قوية إذا كان هذا هو الشيء الذي تفضله (وإذا لم يكن كذلك ، فعليك التفكير في جعله شيئًا يناسبك).
  • وحدة التحكم iPython. إنه لأمر رائع. شيء مذهل. أحبه.
  • Python متاح في معظم الأنظمة ، وإذا لم يكن كذلك يمكنك الحصول عليه باستخدام Miniconda.
  • فحص قوي للخطأ باستخدام كتل المحاولة والتقاط.
  • إذا كنت تعمل على أنظمة تشغيل مختلفة ، فيمكنك استخدام مكتبات Python التي ستتعامل مع كل ذلك تحت الغطاء.
  • حتى لو لم تكن لديك القدرة على البرمجة ، فإن 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

إذا سبق لك استخدام Virtualenv ، أو pipenv (هل هذا شيء؟) ، أو Rbenv ، أو plenv ، أو anyenv ، أو أي من الحواف المختلفة الأخرى التي ظهرت على مر السنين ، فسيبدو هذا مألوفًا لك. الفكرة هي أن المشاريع المختلفة يجب أن يكون لها بيئات برامج معزولة خاصة بها.

conda create -n my-project ipython package1 package2 package2 

إذا كنت مثلي وترغب في الحصول على iPython بسهولة ، فتأكد من تثبيته في أي بيئات جديدة!

مكتبات بايثون لإدارة النظام

قبل أن ندخل في الأمثلة ، دعنا ندرج فقط بعض الحزم المفيدة مع مستنداتهم.

اذهب إلى الحزمة هي حزمة نظام التشغيل. يمكنك استخدامه لسرد الدلائل ، والتحقق من وجود الملفات ، والتحقق من وجود ارتباطات رمزية ، وإنشاء أدلة ، وتشغيل أوامر النظام ، والحصول على المتغيرات البيئية وتعيينها ، والمزيد. انه لشيء رائع!

الحزمة الثانية الخاصة بي لتشغيل أوامر النظام غير الموجودة كمكتبات بايثون سهلة الاستخدام هي وحدة العملية الفرعية.

يحتوي shutil على عمليات ملفات غير موجودة في مكتبة نظام التشغيل.

تقوم مكتبة pprint بطباعة هياكل البيانات المعقدة بمسافة بادئة لطيفة.

تتيح لك مكتبة pytest اختبار كود Python الخاص بك ، فلنواجه الأمر ، فلا شيء يعمل بشكل صحيح في المرات الأولى (القليلة).

كيف يمكنني تنفيذ التعليمات البرمجية الخاصة بي؟

أخيرا! الشفرة!

لقطة الشاشة -2019-12-13-10.33.52

عندما تستخدم Python لإدارة النظام ، يمكنك الغوص مباشرة في وحدة تحكم iPython ، أو كتابة نصوص ثم تنفيذها باستخدام python name-of-script.py.

إذا كنت تفضل كتابة نصوصك ، فلديك الكثير من الخيارات ، وهي حقًا مسألة تفضيل شخصي. أنا أستخدم PyCharm ، التي يتم دفعها ، لكن Visual Studio Code و Atom خيارات مجانية ممتازة بنفس القدر.

أجد أن الأمر يعتمد على ما أعمل عليه. في بعض الأحيان ، أفتح وحدة تحكم iPython وأبدأ في الكتابة ، وفي أحيان أخرى أحتاج إلى شيء أكثر قوة مع الاختبارات وما إلى ذلك.

إذا كنت تستخدم وحدة تحكم iPython أو أي من المحررين المذكورين أعلاه ، فسيكون لديك إكمال تلقائي. الإكمال التلقائي رائع! باستخدام iPython ، ابدأ ببساطة في كتابة الوظيفة واضغط على علامة التبويب للحصول على قائمة بالوظائف المحتملة التي قد ترغب فيها.

لقطة الشاشة 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!