Bạn thực sự thấy nhàm chán khi làm việc với màn hình đen chữ trắng của terminal? Bạn muốn có thay đổi về màu chữ, muốn "đỏ" chỗ cần chú ý, muốn "tím" chỗ sắp gây ra problem ? Vấn đề đặt raMột phần công việc mà tôi đã từng làm là viết các script bằng Python hỗ trợ các đồng nghiệp IT-OPs (IT vận hành) và QA rà soát log files từ hệ thống để phát hiện các vấn đề phát sinh mà hệ thống giám sát online chưa phát hiện ra được (phân tích dữ liệu thô để phát hiện ra các "problem" chưa được định nghĩa). Vì một số lý do đặc biệt mà tôi chỉ được phép cung cấp cho các đồng nghiệp công cụ dạng file script và mỗi lần cần lấy dữ liệu là các đồng nghiệp sẽ gõ lệnh python script_xxx.py trên màn hình terminal, kết quả thì vừa hiển thị trên terminal vừa xuất ra các định dạng file txt hoặc excel,... Thi thoảng tôi lại đến ngồi cùng các đồng nghiệp để cùng trải nghiệm sản phẩm mà các đồng nghiệp gọi là "méo mó có hơn không". Mọi người thường kêu gào với tôi về việc màn hình nhàm chán, đơn điệu, không có điểm nhấn, yêu cầu tôi sửa lại cho dễ dùng hơn. Những lúc ấy tôi chỉ cười và động viên mọi người chịu khó mở file kết quả để xem cho chi tiết còn output ra màn hình chỉ để hỗ trợ thông báo là đã xử lý xong thôi. Cho đến một ngày, tôi nhận được một user-story trực tiếp từ quản lý: "Màn hình báo cáo tra soát từ log-files của anh cung cấp cho users thuộc bộ phận IT và QA đơn điệu quá, mỗi lần muốn tra cứu nhanh thông tin kết quả từ màn hình terminal là users muốn toét cả mắt hoặc phải copy toàn bộ dữ liệu sang text-editor để tìm kiếm theo từ khóa Major, Cirtica, Fatal. Users muốn có màn hình thông tin thân thiện hơn, thay đổi màu sắc ở những chỗ có cảnh báo quan trọng" Có lệnh của "sếp", đã đến lúc tôi cần nghiêm túc hơn với sản phẩm của mình rồi. Khá đơn điệu với màu chữ trắng trên nền đen, ngồi nhìn màn hình như này bảo sao các user của tôi không phát chán :)). Công việc của tôi sẽ là phải tìm cách thực hiện đổi màu các chữ trên màn hình đen để có thể focus đúng vào các vị trí cảnh báo marjor, critical, fatal ? Tìm kiếm với một vài từ khóa và lang thang "đi dạo" qua các package trên “kho” của python thì ra thư viện khá thú vị là Colorama. Hãy cùng tôi thực hiện khám phá thư viện này nhé. Cài đặt thư việnVới Python, để sử dụng thư viện nào đó trên "kho", chúng ta sẽ thực hiện install thư viện này thông qua công cụ pip (lưu ý là nên tạo một virtual enviroment cho đỡ rác nếu bạn chỉ muốn thử nghiệm).
Tài liệu của tác giảThư viện này được tác giả cung cấp cả sample, documents tại đường dẫn colorama. Theo như mô tả trong tài liệu, tác giả hướng đến việc hiển thị màu trên terminal được chia ra làm 3 mục: FOREGROUND: Màu của chữ; BACKGROUND: Màu nền của termial. Thư viện hỗ trợ các màu cơ bản: Black, red, green, yellow, blue, magenta, cyan, white. STYLE: Định dạng chữ bright, dim, normal. Nếu để định dạng BRIGHT sẽ làm cho text hiển thị có vẻ như là… sáng hơn so với DIM, NORMAL (hơi khó để cảm nhận). Khi kết hợp 3 loại này trên cùng một dòng text, có khá nhiều thay đổi thú vị được hiển thị. Dưới đây là ảnh demo sự thay đổi của tác giả: Ví dụ một chút về màu chữ: Tiếp tục đến background Để clear hết các style và quay trở về mặc định, tác giả cung cấp một từ khóa Style.RESET_ALL Có một lưu ý là việc sử dụng thư viện colorama trên windows và linux sẽ khác nhau một chút do cơ chế hiển thị lên
terminal của 2 hệ điều hành khác nhau. Ví dụ đoạn code hiển thị nội dung giống nhau được viết trên linux và windows: Viết trên linux:
Viết trên windows
Áp dụng vào bài toán thực tếSau khi đọc xong các sample của tác giả, tôi bắt đầu áp dụng vào màn hình báo cáo. Sau khi tự "fake" một số hình ảnh báo cáo và gửi cho "khách hàng", mọi người đã lựa chọn hình ảnh như bên dưới:
Ví dụ: Như ví dụ ở trên, chúng ta thấy việc in ra màn hình là việc cộng dồn các chuỗi theo như chúng ta định nghĩa màu. Việc cộng chuỗi làm cho code không được "đẹp" lắm. Chúng ta sẽ sử dụng function
.format để xuất ra một chuỗi.
3 dòng đầu tiên ứng với 3 biểu mẫu giống nhau có định dạng:
Mỗi dòng sẽ sử dụng một dictionary chứa dữ liệu như bên dưới để đổ dữ liệu vào
Ta nhận được kết quả: Chúng ta sẽ đưa dần các màu sắc tương ứng vào, đầu tiên là màu background ở node_number
Kết quả nhận được Oạch!!! Màu background GREEN đã chạy xuyên suốt toàn bộ cả dòng rồi. Do chúng ta chưa thực hiện reset lại style. Bổ sung thêm đoạn reset style vào template.
Kết quả nhận được: Tiếp theo là thêm màu CYAN vào chữ số lượng warning issue.
Làm tương tự với major và critical
Phần fatal issue, nếu là 0 issue thì dể màu mặc định, nếu có issue thì để màu đỏ, vì vậy chúng ta phải thêm một chút "sơ chế" dữ liệu
Bổ sung thêm dữ liệu node_2, node_3, thực hiện format string và print ra màn hình như ví dụ dòng thứ 1. Kết quả thu được: Sau khi làm xong 3 dòng phía trên thì dòng cuối cùng lại...trở thành đơn giản quá. Kết luận:Trong nội dung bài viết, tôi vừa giới thiệu và hướng dẫn các bạn cách sử dụng thư viện colorama, nếu các bạn thấy hay và hữu ích hãy thả một star cho tác giả trên codelearn và trên github nhé: https://github.com/tartley/colorama Cảm ơn các bạn đã đọc bài viết của tôi. |