Hướng dẫn python rich status - tình trạng giàu có của trăn

Gần đây tôi đã thêm một chỉ báo trạng thái vào ứng dụng Azruntime của mình. Nếu người dùng có nhiều máy ảo trong đăng ký của họ, ứng dụng Azruntime có thể mất nhiều thời gian để chạy. Người dùng sẽ đánh giá cao việc nhìn thấy trạng thái để họ biết chương trình vẫn đang chạy và không bị treo lên.

Hướng dẫn python rich status - tình trạng giàu có của trăn

Tôi đã sử dụng thư viện phong phú để thực hiện chỉ báo trạng thái. Tôi đã phải tìm hiểu thêm về các nhà quản lý bối cảnh Python để hiểu cách các chỉ số trạng thái và thanh của thư viện phong phú hoạt động. Tài liệu của Thư viện phong phú nhằm vào các lập trình viên từ trung cấp đến tiên tiến và các hướng dẫn phong phú mà tôi tìm thấy trên web không bao gồm bằng cách sử dụng các tính năng cập nhật trạng thái của Thư viện phong phú.

Trong bài đăng này, tôi sẽ chia sẻ những gì tôi đã học trong khi thêm một chỉ báo trạng thái vào chương trình của mình và chỉ cho bạn cách thực hiện tương tự trong các dự án của bạn.

Tổng quan về thư viện phong phú

Thư viện phong phú giúp dễ dàng thêm màu sắc và kiểu dáng vào đầu ra thiết bị đầu cuối. Giàu cũng có thể hiển thị các bảng đẹp, thanh tiến trình, markdown, cú pháp mã nguồn được tô sáng, tracbacks và hơn thế nữa.1

Bài đăng này chỉ tập trung vào việc tạo một chỉ báo trạng thái. Để tìm hiểu thêm về những gì Rich có thể làm cho bạn, tôi khuyến khích bạn đọc một trong những tổng quan phong phú tuyệt vời có sẵn trên Internet. Tôi liệt kê một vài dưới đây:

  • Python Rich - cách tốt nhất để thêm màu sắc, biểu tượng cảm xúc, bảng và nhiều hơn nữa (video)
  • Xây dựng giao diện bảng điều khiển phong phú trong Python

Một cách khác để xem làm thế nào phong phú có thể cải thiện đầu ra văn bản trong các ứng dụng bảng điều khiển Python của bạn là chạy mã mẫu được cung cấp bởi gói phong phú. Chạy những điều sau đây để xem hầu hết những gì người giàu có thể làm:

(env) $ pip install rich
(env) $ python -m rich

Điều này sẽ xuất ra một màn hình mẫu, như được hiển thị bên dưới:

Hướng dẫn python rich status - tình trạng giàu có của trăn

Học từ mã mẫu phong phú

Dự án phong phú cung cấp mã mẫu cho tất cả các tính năng của nó. Tôi thấy rằng mã mẫu là cách tốt nhất để hiểu cách sử dụng từng tính năng.

Đầu tiên, tôi chạy mã mẫu để xem đầu ra trông như thế nào. Sau đó, tôi mở tập tin và xem mã. Các mô -đun thư viện phong phú được liệt kê trong phần tham chiếu tài liệu thư viện phong phú.

Chạy mã mẫu bằng cách chạy mô -đun. Ví dụ, tôi đang tìm cách tạo bản cập nhật trạng thái. Tôi đã thấy mô -đun có tên Rich.Update và quyết định dùng thử. Tôi đã chạy lệnh:

(env) $ python -m rich.status

Tôi thấy rằng đầu ra trông giống như loại cập nhật trạng thái mà tôi muốn. Xem đầu ra bên dưới:

Hướng dẫn python rich status - tình trạng giàu có của trăn

Bảng điều khiển hiển thị biểu tượng spinner bên cạnh một số văn bản thay đổi khi chương trình chạy. Tiếp theo, tôi nhấp vào mô -đun Rich.Status trên trang Tài liệu tham khảo tài liệu phong phú. Tôi đã thấy các tài liệu mô -đun. Để xem các ví dụ trong mã nguồn, tôi đã nhấp vào liên kết mã nguồn, như được hiển thị bên dưới:

Hướng dẫn python rich status - tình trạng giàu có của trăn

Trong mã nguồn mô -đun, tôi đã cuộn xuống phía dưới để tìm mã kiểm tra trong if __name__ == __main__. Như được hiển thị bên dưới, tôi có thể so sánh mã với kết quả tôi đã thấy khi trước đây tôi chạy mô -đun.

Hướng dẫn python rich status - tình trạng giàu có của trăn

Sau khi xem phần đầu ra của mô-đun Rich.Status, trang tham chiếu của nó và mã nguồn của nó, bây giờ tôi thấy cách tôi có thể triển khai chỉ báo trạng thái kiểu spinner spinner cho ứng dụng Azruntime của tôi.

Trước tiên tôi cần tạo một đối tượng giao diện điều khiển từ lớp giao diện điều khiển phong phú. Sau đó, tôi tạo một trình quản lý ngữ cảnh bằng phương thức trạng thái đối tượng console và đặt thông báo trạng thái ban đầu trong đó. Cuối cùng, mỗi lần tôi muốn thay đổi thông báo trạng thái trong bối cảnh đang chạy, tôi sử dụng phương thức Rich.Status.Update.

Người quản lý bối cảnh Python

Tôi đang sử dụng phong phú để thêm chức năng vào một chương trình hiện có và cho đến khi tôi bắt đầu sử dụng thư viện phong phú, tôi chưa bao giờ sử dụng các trình quản lý ngữ cảnh hoặc câu lệnh với câu lệnh. Tôi đọc lại chương ngoại lệ đó trong cuốn sách Python 2 và xem xét một số hướng dẫn trực tuyến. Bây giờ, tôi có thể giải thích thêm về các nhà quản lý bối cảnh Python.

Các nhà quản lý bối cảnh được tạo ra bởi tuyên bố với. Chúng là một chủ đề Python tiên tiến nhưng chúng tôi sử dụng chúng mọi lúc. Hầu hết các lập trình viên Python mới bắt đầu đã thấy tuyên bố với các ví dụ và trong các hướng dẫn. Nó thường được sử dụng khi làm việc với các tập tin.

Một ví dụ điển hình được hiển thị dưới đây:

with open('example.txt','r') as reader:
    print(reader.read())

Trong ví dụ trên, câu lệnh With gọi hàm Open () và gán đối tượng được trả về, là đối tượng tệp, cho một biến có tên là đầu đọc. Dòng tiếp theo in mọi thứ được trả về bằng phương thức đối tượng tệp đã đọc (). Mã trình quản lý bối cảnh được tích hợp vào đối tượng tệp đóng tệp abertxt ngay khi câu lệnh cuối cùng trong khối mã, trong trường hợp này là hàm in (), hoàn thành.

Nếu bạn không sử dụng câu lệnh với câu lệnh, như được hiển thị bên dưới, Python sẽ giữ tệp example.txt cho đến khi lập trình viên bảo nó làm khác.

reader = open('example.txt','r')
print(reader.read())

Trong ví dụ trên, đối tượng tệp được trả về bởi hàm Open () được gán cho một biến có tên là đầu đọc. Dòng tiếp theo in mọi thứ được trả về bằng phương thức đối tượng tệp đã đọc (). Trong trường hợp này, lập trình viên phải nhớ đóng một cách rõ ràng tệp bằng cách sử dụng phương thức đối tượng tệp Đóng (), như được hiển thị bên dưới.

reader.close()

Nếu lập trình viên không đóng tệp, nó vẫn mở cho đến khi tất cả các mã còn lại trong tập lệnh kết thúc chạy hoặc biến đầu đọc được gán cho một đối tượng khác. Tính năng thu thập rác Python sườn sẽ giải phóng bộ nhớ được sử dụng bởi đối tượng tệp và đóng tệp.

Lập trình viên cần xem xét những gì có thể xảy ra nếu xảy ra lỗi trước khi họ đóng tệp. Họ có thể cần kiểm tra lỗi và đóng tệp bằng cách sử dụng các câu lệnh thử/cuối cùng. Tuyên bố cũng đảm bảo các tài nguyên được đóng khi xảy ra lỗi và dẫn đến mã dễ đọc hơn.

Sử dụng câu lệnh With là cách của Pythonic, để mở các tệp hoặc các tài nguyên được chia sẻ khác như kết nối mạng.

Các kỹ sư mạng đang học Python thường sẽ sử dụng câu lệnh With khi gọi một hàm mở tệp, kết nối mạng hoặc kết nối cơ sở dữ liệu. Các lập trình viên nâng cao hơn có thể sử dụng giao thức quản lý bối cảnh để tạo các chức năng hoặc các lớp mới thực hiện các hành động cụ thể khi bối cảnh được đóng.

Làm thế nào phong phú sử dụng các nhà quản lý bối cảnh

Một số tính năng của thư viện phong phú, chẳng hạn như mô -đun Rich.Status, phải được thực hiện bằng cách sử dụng câu lệnh With, tạo ra một bối cảnh trong đó đầu ra trên màn hình bảng điều khiển được tạo và cập nhật.

Tạo chương trình mẫu sau đây để chứng minh cách thức hoạt động của mô -đun Rich.Update. Để kiểm tra mức độ Rich.Status sẽ hoạt động trong một vòng lặp, hãy tạo một tệp Python có chứa mã sau hoặc chạy nó trong Python REPLE.

from rich.console import Console
from time import sleep

status_list = ["First status","Second status","Third status"]
console = Console()
with console.status("Initial status") as status:
    sleep(3)  # or do some work
    for stat in status_list:
        status.update(stat)
        sleep(3)  # or do some more work

Chương trình tạo một đối tượng có tên Bảng điều khiển từ lớp Console (). Sau đó, nó tạo ra một đối tượng ngữ cảnh được đặt tên trạng thái từ phương thức trạng thái đối tượng Console, một sự hiểu biết về nó với trạng thái của trạng thái ban đầu. Sau đó, nó lặp lại thông qua status_list và cập nhật đối tượng trạng thái cứ sau ba giây. Khi chương trình chạy, bạn sẽ thấy một biểu tượng của spinner, cũng cung cấp cho người dùng một số phản hồi mà chương trình đang chạy.

Chương trình trên theo ví dụ được hiển thị trong mã ví dụ Module Module Rich.Status. Nhưng, tại sao không sử dụng lớp Rich.Status.Status (), thay vì lớp Rich.console.console ()? Trong thực tế, bạn đã sử dụng nó. Phương thức trạng thái của bảng điều khiển () Nhập và sử dụng lớp Rich.Status.Status (). Các nhà phát triển phong phú đã chỉ ra một ví dụ sử dụng lớp Console () vì các nhà phát triển có thể có nhiều thứ xảy ra trong cùng một bảng điều khiển hoặc có thể sử dụng nhiều bảng điều khiển. Sử dụng một đối tượng bảng điều khiển cho thấy rõ đầu ra của đối tượng trạng thái sẽ được hiển thị ở đâu.

Bạn có thể sử dụng lớp Rich.status.status () trực tiếp, nếu bạn muốn. Và, nếu bạn quan tâm đến việc sử dụng bảng điều khiển nào, bạn có thể chỉ định đối tượng nào đối tượng của lớp Rich.status.status () sử dụng khi bạn tạo một đối tượng với nó. Nó sẽ sử dụng bảng điều khiển mặc định nếu bạn không chỉ định một.

Dưới đây là một ví dụ về việc hoàn thành hiển thị cập nhật trạng thái tương tự như chương trình trước đó, nhưng tôi sử dụng lớp Rich.Status.status () trực tiếp:

from rich.status import Status
from time import sleep

status_list = ["First status","Second status","Third status"]
with Status("Initial status") as status:
    sleep(3)  # or do some work
    for stat in status_list:
        status.update(stat)
        sleep(3)  # or do some more work

Chương trình tạo ra một đối tượng bối cảnh từ lớp Rich.Status.status, trạng thái được đặt tên được khởi tạo với trạng thái của trạng thái ban đầu. Sau đó, nó lặp lại thông qua danh sách các trạng thái và hiển thị từng trạng thái trên màn hình tạo thành ba giây.

Một trong hai phương pháp hiển thị ở trên sẽ hoạt động. Bạn cũng có thể triển khai các bản cập nhật trạng thái bằng các lớp Rich.Live.Live () hoặc Rich.ProTHER.SpinnerColumn ().

Thêm giàu vào Azruntime

Cho thấy cách tôi đã thêm một chỉ báo trạng thái vào một chương trình hiện có sẽ giúp bạn hiểu rõ hơn về cách triển khai các tính năng thư viện phong phú.

Tôi sẽ sử dụng lớp Rich.console.console () vì đó là cách các nhà phát triển phong phú triển khai cập nhật trạng thái trong mô -đun Rich.Status. Vì lớp Rich.console.console () phải được triển khai bằng Trình quản lý ngữ cảnh, tôi cần thực hiện nó bên trong một hàm và tôi không thể chuyển Trình quản lý ngữ cảnh cho các chức năng khác.

Mô -đun Azruntime của tôi xác định một hàm có tên build_vm_list, sử dụng lồng nhau cho các vòng lặp để lặp qua thông qua các trình tạo thông tin về từng máy ảo, cho mỗi nhóm tài nguyên, theo đăng ký. Bản dựng_vm_list trả về một danh sách lồng nhau chứa thông tin thời gian chạy về tất cả các máy ảo trong đăng ký của tôi. Danh sách đó được hiển thị dưới dạng bảng cho bảng điều khiển bởi một hàm khác.

Tôi đã mở chương trình Azruntime của mình trong một trình soạn thảo văn bản và thực hiện các thay đổi sau.

Đầu tiên, tôi nhập các mô -đun phong phú mà tôi sẽ sử dụng:

from rich.console import Console

Trong hàm build_vm_list (), tôi đã tạo một giao diện điều khiển phong phú mới và sử dụng câu lệnh With để tạo Trình quản lý bối cảnh điều khiển.

console = Console()
with console.status("[green4]Getting subscriptions[/green4]") as status:

Tôi đã thụt vào tất cả các mã vòng lặp lồng nhau bên dưới câu lệnh với câu lệnh để Python biết đó là một phần của bối cảnh trạng thái.

Cuối cùng, trong vòng lặp lồng sâu nhất, tôi cập nhật bối cảnh trạng thái với thông báo trạng thái chứa tên đăng ký, tên nhóm tài nguyên và tên VM có sẵn tại thời điểm đó.

status.update(
    "[grey74]Subscription: [green4]" +
    subscription_name +
    "[/green4]  Resource Group: [green4]" +
    resource_group +
    "[/green4]  VM: [green4]" +
    vm_name +
    "[/green4][/grey74]"
)

Chức năng mới trông giống như sau.Tôi đã xóa một số mã để làm cho ví dụ ngắn hơn.Toàn bộ mã chức năng build_vm_list () có sẵn trong kho lưu trữ Azruntime trên GitHub.

(env) $ python -m rich.status
0

Sự kết luận

Tôi đã sử dụng thư viện phong phú Python để thực hiện hiển thị trạng thái cho ứng dụng CLI Azruntime của tôi, chỉ sử dụng một vài dòng mã.

Thư viện phong phú chứa nhiều lớp và chức năng khác ngoài mô -đun Rich.Status.Ví dụ: tôi cũng đã sử dụng mô -đun phong phú.

Nếu bạn thêm màu vào đầu ra của mình, các thẻ màu được sử dụng được liệt kê trong Phụ lục tài liệu phong phú.


  1. Từ trang GitHub Readme phong phú, truy cập ngày 2 tháng 3 năm 2021 & nbsp;

  2. Học Python, Phiên bản thứ 5, Chương 33, trang 1152-1156 & NBSP; ↩