Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

วิธีแทนที่ Bash ด้วย Python เป็นภาษาบรรทัดคำสั่ง Go-To ของคุณ

ฉันมีความสัมพันธ์แบบรักและเกลียดกับทุบตี ฉันใช้เวลาส่วนใหญ่ในเทอร์มินัล และ bash เป็น "ภาษาการเขียนโปรแกรม" เริ่มต้นของฉัน บางครั้งฉันบอกคนที่ find, grep และ xargs ใช้โครงสร้างพื้นฐานของพวกเขา และพวกเขาหัวเราะและหัวเราะจนพวกเขารู้ว่าฉันจริงจัง

การเลือก Python เป็นทางเลือกที่สมบูรณ์แบบสำหรับผู้ดูแลระบบ นอกจากนี้ยังเหมาะสำหรับทุกคนที่ต้องจัดการกับสิ่งใดๆ ในเทอร์มินัลแต่ไม่ต้องการใช้ bash หรือมีความต้องการที่ซับซ้อนเกินไปสำหรับ bash เมื่องานก้าวไปไกลกว่านั้น

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

ได้เวลาแยก Python ออกแล้ว!

มีประโยชน์มากมายในการใช้ Python เป็นภาษาบรรทัดคำสั่งของคุณ

  • Python มีไลบรารี่ดีๆ มากมายที่จะช่วยคุณได้ทุกอย่าง ซึ่งรวมถึงการจัดการกับการทำงานของระบบ การอ่านไฟล์ การแสดงรายการไดเร็กทอรี การเขียนลูป การตรวจสอบรหัสออก และอื่นๆ
  • เติมข้อความอัตโนมัติด้วย IDE อย่างจริงจัง. ใครอยากจำอะไรได้บ้าง
  • ชุดทดสอบที่แข็งแกร่งหากเป็นของคุณ (และหากไม่ใช่ คุณควรพิจารณาสร้างเป็นของคุณเอง)
  • คอนโซล 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 ส่วนกลางของคุณ แทนที่จะสร้างสภาพแวดล้อมสำหรับงานและโครงการต่างๆ ซึ่งเราจะพูดถึงต่อไป

สร้างสภาพแวดล้อมด้วย Conda

หากคุณเคยใช้ virtualenv, pipenv (นั่นคือสิ่งที่?), Rbenv, plenv, anyenv หรือ env อื่น ๆ ที่ปรากฏขึ้นในช่วงหลายปีที่ผ่านมา ฟังดูคุ้น ๆ สำหรับคุณมาก แนวคิดก็คือโครงการต่างๆ ควรมีสภาพแวดล้อมซอฟต์แวร์ที่แยกจากกัน

conda create -n my-project ipython package1 package2 package2

หากคุณเป็นเหมือนฉันและต้องการให้ iPython พร้อมใช้งาน อย่าลืมติดตั้งลงในสภาพแวดล้อมใหม่!

Python Libraries สำหรับการดูแลระบบ

ก่อนที่เราจะเข้าสู่ตัวอย่าง เรามาลองแสดงรายการแพ็คเกจที่มีประโยชน์พร้อมกับเอกสารของพวกมันก่อน

แพ็คเกจ go to ของฉันคือแพ็คเกจระบบปฏิบัติการ คุณสามารถใช้เพื่อแสดงรายการไดเร็กทอรี ตรวจสอบว่ามีไฟล์อยู่หรือไม่ ตรวจสอบว่ามีลิงก์เชื่อมโยงอยู่หรือไม่ สร้างไดเร็กทอรี เรียกใช้คำสั่งระบบ รับและตั้งค่าตัวแปรสภาพแวดล้อม และอื่นๆ มันเยี่ยมมาก!

แพ็คเกจที่สองของฉันสำหรับการรันคำสั่งระบบที่ไม่มีอยู่ในไลบรารี python ที่มีประโยชน์คือโมดูลกระบวนการย่อย

ชัตเตอร์มีการทำงานของไฟล์ที่ไม่ได้อยู่ในไลบรารีของระบบปฏิบัติการ

ไลบรารี pprint พิมพ์โครงสร้างข้อมูลที่ซับซ้อนด้วยการเยื้องที่ดี

ไลบรารี pytest ให้คุณทดสอบโค้ด Python ของคุณ เพราะงั้น ไม่มีอะไรทำงานอย่างถูกต้องในครั้งแรก (สองสาม) ครั้งแรก

ฉันจะรันโค้ดของฉันได้อย่างไร

ในที่สุด! รหัส!

วิธีแทนที่ Bash ด้วย Python เป็นภาษาบรรทัดคำสั่ง Go-To ของคุณ

เมื่อคุณใช้ Python สำหรับการดูแลระบบ คุณสามารถเข้าสู่คอนโซล iPython ได้โดยตรง หรือเขียนสคริปต์แล้วดำเนินการด้วย python name-of-script.py .

หากคุณต้องการเขียนสคริปต์ คุณมีทางเลือกมากมาย และมันเป็นเรื่องของความชอบส่วนบุคคลอย่างแท้จริง ฉันใช้ PyCharm ซึ่งชำระเงินแล้ว แต่ Visual Studio Code และ Atom ก็เป็นตัวเลือกที่ยอดเยี่ยมไม่แพ้กัน

ฉันพบว่ามันขึ้นอยู่กับสิ่งที่ฉันทำงานอยู่ บางครั้งฉันเพิ่งเปิดคอนโซล iPython และเริ่มพิมพ์ และในบางครั้งฉันต้องการสิ่งที่มีประสิทธิภาพมากขึ้นด้วยการทดสอบและอะไรก็ตาม

หากคุณใช้คอนโซล iPython หรือตัวแก้ไขใดๆ ที่ฉันระบุไว้ข้างต้น คุณจะต้องเติมข้อความอัตโนมัติ การเติมข้อความอัตโนมัตินั้นยอดเยี่ยมมาก! ด้วย iPython เพียงเริ่มพิมพ์ฟังก์ชันของคุณแล้วกดแท็บเพื่อดูรายการฟังก์ชันที่คุณอาจต้องการ

วิธีแทนที่ Bash ด้วย Python เป็นภาษาบรรทัดคำสั่ง Go-To ของคุณ

ฉันไม่สามารถแสดงได้ว่าฉันรักการเติมข้อความอัตโนมัติมากแค่ไหน;-)

ขอความช่วยเหลือ

คุณสามารถไปที่หน้าเอกสารใดก็ได้สำหรับห้องสมุดใดก็ได้ แต่ถ้าคุณทราบชื่อห้องสมุดหรือฟังก์ชัน คุณสามารถเรียกมันขึ้นมาใน iPython

วิธีแทนที่ Bash ด้วย Python เป็นภาษาบรรทัดคำสั่ง Go-To ของคุณ

วิธีแทนที่ Bash ด้วย Python เป็นภาษาบรรทัดคำสั่ง Go-To ของคุณ

คุณสามารถเปิดเมนูวิธีใช้ใน IDE และโปรแกรมแก้ไขข้อความส่วนใหญ่ได้เช่นกัน แต่จะใช้ได้เฉพาะกับโปรแกรมแก้ไขของคุณ

ตัวอย่าง

ขั้นแรกคุณจะต้องนำเข้าแพ็คเกจของคุณ

import os
import subprocess
import shutil
from pprint import pprint

ต่อไปนี้คือตัวอย่างการทำงานของไฟล์และไดเรกทอรีทั่วไป

# 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()

ย้ายไฟล์และไดเร็กทอรีไปรอบๆ

# 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')

ไม่ใช่ทุกอย่างที่จะพร้อมใช้งานผ่านไลบรารี python เช่นการติดตั้งไลบรารีระบบ ดังนั้นให้รันคำสั่งระบบสองสามคำสั่ง!

# 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 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()

เขียนการทดสอบ!

การทดสอบส่วนใหญ่ทำงานโดยใช้ฟังก์ชันที่เรียกว่า assert ซึ่งหมายถึงให้แน่ใจว่าเป็นจริงและหากไม่ตายอย่างดัง

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

วางฟังก์ชันนี้ในไฟล์ชื่อ test_my_code.py และเรียกใช้เป็น pytest test_my_code.py .

สรุปผล

นั่นเป็นเคล็ดลับและกลเม็ดหลักของฉันในการใช้ Python เป็นการแทนที่ bash แบบ go-to ของคุณ ครั้งต่อไปที่คุณต้องเขียนลูปใน bash ให้ลองแยกคอนโซล iPython ออกแล้วดูว่าคุณจะทำอะไรได้บ้างแทน!