2011-12-02 26 views
11

Tôi đang tìm một mô-đun Python có thể thêm hỗ trợ ANSI trong Windows.Mô-đun Python để bật màu ANSI cho stdout trên Windows?

Điều này có nghĩa là sau khi nhập mô-đun, nếu bạn xuất các chuỗi thoát ANSI, chúng sẽ xuất hiện tương ứng.

+0

Điều đó có nghĩa là monkeypatching Python, đó là một điều xấu. Nó là tốt hơn để thiết lập bộ lọc stdout một cách rõ ràng. –

Trả lời

3

Có hai mô-đun python có thể thực hiện mô-đun coloramatendo.ansiterm này, ban đầu được viết cho waf.

Bằng kiểm tra ban đầu cho thấy rằng colorama trưởng thành hơn, ngay cả khi yêu cầu hai dòng mã thay vì một.

import sys 
try: 
    import colorama 
    colorama.init() 
except: 
    try: 
     import tendo.ansiterm 
    except: 
     pass 

sys.stdout.write"\033[33mYellow Submarine" 
sys.stderr.write"\033[31mred, red , wine!" 

Bây giờ, cả hai sẽ làm việc bình thường nhưng nếu bạn cố gắng chuyển hướng chỉ một trong những stderr hoặc stdout, ansiterm sẽ đưa ra mã ANSI để sàng lọc và đầu ra chuyển hướng.

Tôi không chắc chắn nhưng tôi nghi ngờ rằng hành vi đúng là để dải mã ANSI khi đầu ra si không phải là tty, bạn không muốn thấy ANSI thoát trong tệp nhật ký.

+0

ANSI thoát trong các tệp nhật ký là tốt, tôi tin; ví dụ, máy nhắn tin Unix 'less' đúng hiển thị văn bản với chuỗi màu ANSI. – EOL

11

Đặt cược tốt nhất của bạn có thể là sử dụng mô-đun colorama.

Thực tế, tôi tin rằng giao diện điều khiển Windows không hỗ trợ màu ANSI một cách tự nhiên. colorama giải quyết khó khăn này bằng cách chặn các chuỗi ANSI và thực hiện các cuộc gọi thay đổi màu Windows thích hợp. Bằng cách này, mã của bạn có thể khá di động, vì nó có thể in màu theo cùng một cách trên cả Windows và trong các thiết bị đầu cuối tuân thủ ANSI.

Các vấn đề liên quan