Kết bạn với Python và Bash: Phát hành thư viện python-shell và smart-env v. 1.0.1

Chúc mọi người một ngày tốt lành!

29 Tháng Hai 2020 năm việc phát hành vi mô chính thức của các thư viện đã diễn ra thông minh-env и vỏ trăn. Đối với những người chưa biết, tôi khuyên bạn nên đọc nó trước bài viết đầu tiên.

Nói tóm lại, những thay đổi bao gồm hoàn thành lệnh, mở rộng khả năng chạy lệnh, một số tính năng tái cấu trúc và sửa lỗi.

Để biết chi tiết xin vui lòng xem mèo.

Có gì mới trong vỏ trăn?

Tôi sẽ bắt đầu ngay với món tráng miệng.

Hoàn thành lệnh

Đồng ý - thật thuận tiện khi trình soạn thảo/IDE/thiết bị đầu cuối nhắc bạn tên của lệnh và đôi khi cả các tham số cuộc gọi? Vì vậy, python-shell đang dần đạt được tiến bộ trong việc cung cấp chức năng tương tự. Do thực tế là các trường của lớp Shell dưới mui xe thực tế không phải là các trường của nó (__getattr__ phổ biến), tính năng tự động hoàn thành cũng được tạo từ đầu (bằng cách nạp chồng phương thức __dir__ tương ứng). Tính năng tự động hoàn thành hiện hoạt động trong môi trường BPython và IPython. Tất nhiên, tôi muốn thấy sự tích hợp với các sản phẩm đáng kính hơn như PyCharm và khả năng triển khai đang được nghiên cứu theo hướng này.

Thêm thuộc tính

Là một phần của bản phát hành, lớp Shell đã nhận được thuộc tính Last_command mới. Sự cần thiết của nó nảy sinh vì khi một ShellException được ném ra bởi một lệnh có mã trả về khác XNUMX, đối tượng Command không được trả về từ lệnh gọi __call__() đến đối tượng lệnh. Bây giờ có một cơ hội để làm điều này:

try:
    command = Shell.touch('/foo.txt')
except ShellException:
    command = Shell.last_command

Danh sách các thuộc tính của đối tượng Command cũng đã được mở rộng. Đã thêm trường lỗi trả về đầu ra lệnh cho luồng lỗi.

Chạy các lệnh có tên Python không hợp lệ

Hầu hết mọi hệ thống đều có ít nhất một chương trình có tên không phù hợp làm mã định danh trong Python (ví dụ: tiện ích 2to3 nổi tiếng). Gọi cho cô ấy với

Shell.2to3()

Nếu nó không hoạt động, trình thông dịch sẽ không cho phép nó đi qua.
Giải pháp là gọi lệnh theo cách vòng vo:

Shell("2to3")  # возвращает объект команды

Điều đáng lưu ý là theo cách tương tự, bạn có thể chạy các lệnh hợp lệ theo quan điểm của trình thông dịch, điều này mang lại cơ hội tạo các tập lệnh linh hoạt như

cmd = "python{}".format(sys.version_info[0])
Shell(cmd)(*args, **kwargs)

Những thay đổi nhỏ

  • Các phương thức __repr__() và __str__() của đối tượng lớp Command đã được triển khai, hiện tạo ra các giá trị trực quan (một lệnh có các tham số và đầu ra xuất chuẩn của nó tương ứng).
  • Sửa mã nhỏ.
  • Thêm phạm vi kiểm tra, cũng như tổ chức lại các phạm vi hiện có.
  • Thêm các lớp Subprocess và Process, mục đích của nó là tạo ra một mức độ trừu tượng bổ sung khi làm việc với mô-đun quy trình con. Chủ yếu cần thiết để loại bỏ sự trùng lặp mã khi làm việc với Python 2/3, nhưng cũng có khả năng cung cấp các phần thưởng khác.

Có gì mới trong Smart-env?

Không giống như python-shell, thư viện smart-env có ít thay đổi hơn. Lý do cho điều này rất đơn giản - thiếu thời gian rảnh, trong đó một số cải tiến tiềm năng (ví dụ: tự động hoàn thành các biến môi trường) đã được chuyển sang bản phát hành tiếp theo.

Trên thực tế, những thay đổi sau đã được thực hiện đối với thư viện:

  • Sửa mã nhỏ.
  • Tái cấu trúc.
  • Tổ chức lại và sàng lọc các bài kiểm tra hiện có.

Kế hoạch cho các phiên bản tiếp theo

thư viện python-shell

  • Thêm hỗ trợ cho các cuộc gọi lệnh không chặn (song song thực thi).

thư viện thông minh-env

  • Thực hiện tự động hoàn thành các biến môi trường trong lớp ENV.
  • Hỗ trợ toán tử in để kiểm tra sự tồn tại của biến env.
  • Triển khai hỗ trợ hàm str() và repr() cho lớp ENV.

Ngày phát hành tiếp theo sẽ được thông báo thêm trên các kênh liên lạc sau:

Nguồn: www.habr.com

Thêm một lời nhận xét