Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Cách thay thế Bash bằng Python làm ngôn ngữ dòng lệnh truy cập của bạn

Tôi có một chút yêu và ghét mối quan hệ với bash. Tôi dành nhiều thời gian cho thiết bị đầu cuối và bash là "ngôn ngữ lập trình" mặc định của tôi. Đôi khi tôi nói với mọi người rằng find, grep và xargs chạy cơ sở hạ tầng của họ, và họ cười và cười cho đến khi họ nhận ra tôi nghiêm túc.

Chọn một số Python là một lựa chọn hoàn hảo cho các quản trị viên hệ thống. Nó cũng tuyệt vời cho những ai phải xử lý bất cứ thứ gì trong thiết bị đầu cuối nhưng không muốn sử dụng bash hoặc có nhu cầu quá phức tạp để bash. Khi một nhiệm vụ vượt quá

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

đã đến lúc để phá vỡ Python!

Có rất nhiều lợi ích khi sử dụng Python làm ngôn ngữ dòng lệnh của bạn.

  • Python có rất nhiều thư viện tuyệt vời để giúp bạn với khá nhiều thứ. Điều đó bao gồm xử lý các hoạt động của hệ thống, đọc tệp, liệt kê thư mục, ghi vòng lặp, kiểm tra mã thoát, v.v.
  • Tự động hoàn thành với IDE. Nghiêm túc. Ai muốn phải ghi nhớ bất cứ điều gì?
  • Bộ thử nghiệm mạnh mẽ nếu đó là thứ của bạn (và nếu không, bạn nên cân nhắc biến nó thành thứ của mình).
  • Bảng điều khiển iPython. Rất tuyệt vời. Ngạc nhiên. TÔI YÊU THÍCH NÓ.
  • Python có sẵn trên hầu hết các hệ thống và nếu không, bạn có thể tải Python bằng Miniconda.
  • Kiểm tra lỗi hiệu quả với các khối thử và bắt.
  • Nếu bạn làm việc trên các hệ điều hành khác nhau, bạn có thể sử dụng các thư viện Python để giải quyết tất cả những điều đó.
  • Ngay cả khi bạn không có khả năng lập trình, Python vẫn là một ngôn ngữ dễ bắt đầu.

Bắt đầu

Để bắt đầu, trước tiên, bạn cần phải cài đặt Python hoặc cài đặt nó với Miniconda.

Kiểm tra xem bạn đã cài đặt iPython chưa

which python
which ipython

Nếu cả hai điều này đều thành công, bạn đang kinh doanh! Nếu bạn có Python, nhưng không phải iPython, bạn sẽ phải cài đặt nó. Bạn có thể cài đặt nó như một gói hệ thống, nhưng tôi thực sự khuyên bạn chỉ nên cài đặt nó với Miniconda.

Cài đặt Miniconda

Tải xuống trình cài đặt cho hệ điều hành của bạn tại đây. Tôi khuyên bạn nên cài đặt Python3.

Sau đó, nó chỉ là một cài đặt đơn giản.

bash Miniconda3-latest-Linux-x86_64.sh

Làm theo lời nhắc và bạn sẽ cài đặt Miniconda3. Khi bạn đã cài đặt nó, bạn sẽ muốn chạy bản cập nhật, vì đây là công nghệ và tất nhiên bạn muốn chạy bản cập nhật.;-)

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

Khắc phục sự cố

Nếu bạn gặp sự cố khi cài đặt bất kỳ gói nào, đây là một số mẹo.

  • Chạy conda clean --all và thử lại.
  • Đảm bảo rằng bạn đang sử dụng đúng kênh.
  • Chạy conda update -y --all
  • Cố gắng cài đặt càng ít càng tốt vào không gian chung cư toàn cầu của bạn. Thay vào đó, hãy tạo môi trường cho các nhiệm vụ và dự án khác nhau mà chúng ta sẽ xem xét tiếp theo.

Tạo môi trường với Conda

Nếu bạn đã từng sử dụng virtualenv, pipenv (có phải vậy không?), Rbenv, plenv, anyenv hoặc bất kỳ env nào khác đã xuất hiện trong nhiều năm, điều này nghe có vẻ rất quen thuộc với bạn. Ý tưởng là các dự án khác nhau nên có môi trường phần mềm riêng biệt.

conda create -n my-project ipython package1 package2 package2

Nếu bạn giống tôi và muốn có sẵn iPython, hãy đảm bảo rằng bạn cài đặt nó vào bất kỳ môi trường mới nào!

Thư viện Python dành cho quản trị hệ thống

Trước khi đi vào các ví dụ, chúng ta hãy liệt kê một số gói tiện dụng cùng với tài liệu của chúng.

Gói đi tới của tôi là gói hệ điều hành. Bạn có thể sử dụng nó để liệt kê các thư mục, kiểm tra xem các tệp có tồn tại hay không, kiểm tra xem các liên kết tượng trưng có tồn tại hay không, tạo các thư mục, chạy các lệnh hệ thống, lấy và đặt các biến môi trường, v.v. Thật tuyệt!

Gói thứ hai của tôi để chạy các lệnh hệ thống không tồn tại dưới dạng thư viện python tiện dụng là mô-đun quy trình con.

Shutil có các thao tác tệp không có trong thư viện hệ điều hành.

Thư viện pprint in ra các cấu trúc dữ liệu phức tạp với thụt lề đẹp mắt.

Thư viện pytest cho phép bạn kiểm tra mã Python của mình, bởi vì hãy đối mặt với nó, không có gì hoạt động chính xác trong (vài) lần đầu tiên.

Làm cách nào để thực thi mã của tôi?

Cuối cùng! Mã!

Cách thay thế Bash bằng Python làm ngôn ngữ dòng lệnh truy cập của bạn

Khi bạn đang sử dụng Python để quản trị hệ thống, bạn có thể đi thẳng vào bảng điều khiển iPython hoặc viết các tập lệnh và sau đó thực thi chúng bằng python name-of-script.py .

Nếu bạn thích viết kịch bản của mình, bạn có rất nhiều lựa chọn, và đó thực sự là vấn đề của sở thích cá nhân. Tôi sử dụng PyCharm trả phí, nhưng Visual Studio Code và Atom là những lựa chọn miễn phí tuyệt vời như nhau.

Tôi thấy rằng nó phụ thuộc vào những gì tôi đang làm. Đôi khi tôi chỉ cần mở bảng điều khiển iPython và bắt đầu nhập, và những lần khác, tôi cần một thứ gì đó mạnh mẽ hơn với các bài kiểm tra và những thứ khác.

Nếu bạn đang sử dụng bảng điều khiển iPython hoặc bất kỳ trình chỉnh sửa nào mà tôi đã liệt kê ở trên, bạn sẽ có tính năng tự động hoàn thành. Tự động hoàn thành thật tuyệt vời! Với iPython, chỉ cần bắt đầu nhập chức năng của bạn và nhấn tab để nhận danh sách các chức năng tiềm năng mà bạn có thể muốn.

Cách thay thế Bash bằng Python làm ngôn ngữ dòng lệnh truy cập của bạn

Tôi không thể diễn tả rằng tôi thích tính năng tự động hoàn thành như thế nào.;-)

Nhận trợ giúp

Bạn có thể truy cập bất kỳ trang tài liệu nào cho bất kỳ thư viện nào, nhưng nếu bạn biết tên của thư viện hoặc chức năng, bạn có thể đưa nó lên trong iPython.

Cách thay thế Bash bằng Python làm ngôn ngữ dòng lệnh truy cập của bạn

Cách thay thế Bash bằng Python làm ngôn ngữ dòng lệnh truy cập của bạn

Bạn cũng có thể hiển thị menu trợ giúp trong hầu hết các IDE và trình soạn thảo văn bản, nhưng menu này sẽ dành riêng cho trình soạn thảo của bạn.

Ví dụ

Trước tiên, bạn sẽ cần nhập các gói của mình

import os
import subprocess
import shutil
from pprint import pprint

Dưới đây là một số ví dụ về các hoạt động phổ biến đối với tệp và thư mục.

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

Di chuyển các tệp và thư mục xung quanh

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

Không phải mọi thứ đều có sẵn thông qua thư viện python, chẳng hạn như cài đặt thư viện hệ thống, vì vậy hãy chạy một vài lệnh hệ thống!

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

Ghi vào tệp!

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

Viết một số bài kiểm tra!

Các bài kiểm tra chủ yếu hoạt động bằng cách sử dụng một hàm được gọi là khẳng định, về cơ bản nói rằng hãy đảm bảo rằng điều này là đúng và nếu không sẽ rất ồn ào.

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

Đặt chức năng này trong một tệp có tên là test_my_code.py và chạy dưới dạng pytest test_my_code.py .

Kết thúc

Đó là nó cho các mẹo và thủ thuật chính của tôi để sử dụng Python làm sự thay thế bash đầu tiên của bạn. Lần tới khi bạn cần viết một vòng lặp trong bash, hãy cân nhắc phá vỡ bảng điều khiển iPython và xem thay vào đó bạn có thể nghĩ ra điều gì!