Bagaimana saya bisa menampilkan teks berwarna ke terminal, dengan Python? Apa simbol Unicode terbaik untuk mewakili blok padat?
python
unicode
terminal
ansi-colors
aboSamoor
sumber
sumber
█
Satu-satunya masalah adalah bahwa itu diperpanjang ASCII, mungkin Anda bisa membuatnya bekerja menggunakanhttp://stackoverflow.com/questions/8465226/using-extended-ascii-codes-with-python
Jawaban:
Ini agak tergantung pada platform apa Anda berada. Cara paling umum untuk melakukan ini adalah dengan mencetak urutan pelarian ANSI. Sebagai contoh sederhana, inilah beberapa kode python dari skrip pembuat blender :
Untuk menggunakan kode seperti ini, Anda dapat melakukan sesuatu seperti
atau, dengan Python3.6 +:
Ini akan bekerja pada unix termasuk OS X, linux dan windows (asalkan Anda menggunakan ANSICON , atau di Windows 10 asalkan Anda mengaktifkan emulasi VT100 ). Ada kode ansi untuk mengatur warna, memindahkan kursor, dan banyak lagi.
Jika Anda akan menjadi rumit dengan ini (dan sepertinya Anda adalah jika Anda sedang menulis permainan), Anda harus melihat ke dalam modul "kutukan", yang menangani banyak bagian rumit dari ini untuk Anda. The Python Kutukan HowTO adalah pengenalan yang baik.
Jika Anda tidak menggunakan ASCII yang diperluas (yaitu tidak pada PC), Anda terjebak dengan karakter ascii di bawah 127, dan '#' atau '@' mungkin merupakan taruhan terbaik Anda untuk satu blok. Jika Anda dapat memastikan terminal Anda menggunakan rangkaian karakter ascii IBM yang diperluas , Anda memiliki banyak opsi lagi. Karakter 176, 177, 178 dan 219 adalah "karakter blok".
Beberapa program berbasis teks modern, seperti "Dwarf Fortress", meniru mode teks dalam mode grafis, dan menggunakan gambar font PC klasik. Anda dapat menemukan beberapa dari bitmap ini yang dapat Anda gunakan pada Wiki Dwarf Fortress see ( tilesets buatan pengguna ).
The Text Mode Demo Contest memiliki lebih banyak sumber daya untuk melakukan grafis dalam modus teks.
Hmm .. Saya pikir agak terbawa dengan jawaban ini. Namun, saya sedang merencanakan permainan petualangan berbasis teks epik. Semoga berhasil dengan teks berwarna Anda!
sumber
tput
, seperti itu karena menghasilkan lebih banyak kode portabel.disable
adalah ketika Anda mengirimkan output ke file; sementara alat seperticat
mungkin mendukung warna, umumnya lebih baik untuk tidak mencetak informasi warna ke file.import ctypes;
kernel32 = ctypes.WinDLL('kernel32');
hStdOut = kernel32.GetStdHandle(-11);
mode = ctypes.c_ulong();
kernel32.GetConsoleMode(hStdOut, ctypes.byref(mode));
mode.value |= 4;
kernel32.SetConsoleMode(hStdOut, mode)
.Saya terkejut tidak ada yang menyebutkan modul termcolor Python . Penggunaannya cukup sederhana:
Atau dengan Python 3:
Namun, itu mungkin tidak cukup canggih untuk pemrograman game dan "blok berwarna" yang ingin Anda lakukan ...
sumber
termcolor.COLORS
memberi Anda daftar warnaos.system('color')
pertama, maka urutan pelarian ANSI mulai bekerja.Jawabannya adalah Colorama untuk semua pewarnaan lintas-platform dengan Python.
Screenshot contoh Python 3.6:
sumber
<b>bold</b>
) untuk menambahkan gaya ke teks terminalCetak string yang memulai warna / gaya, kemudian string, lalu akhiri perubahan warna / gaya dengan
'\x1b[0m'
:Dapatkan tabel opsi format untuk teks shell dengan kode berikut:
Contoh terang-gelap (lengkap)
Contoh gelap-terang (sebagian)
sumber
Tentukan string yang memulai warna dan string yang mengakhiri warna, lalu cetak teks Anda dengan string awal di depan dan string akhir di akhir.
Ini menghasilkan berikut
bash
, dalamurxvt
dengan skema warna gaya Zenburn:Melalui eksperimen, kita bisa mendapatkan lebih banyak warna:
Catatan:
\33[5m
dan\33[6m
berkedip.Dengan cara ini kita dapat membuat koleksi warna penuh:
Berikut adalah kode untuk menghasilkan tes:
sumber
\33[0m
, atau diCEND
atas.Anda ingin belajar tentang urutan pelarian ANSI. Berikut ini contoh singkatnya:
Untuk info lebih lanjut lihat http://en.wikipedia.org/wiki/ANSI_escape_code
Untuk karakter blok, coba karakter unicode seperti \ u2588:
Menyatukan semuanya:
sumber
def d(*v): return '\x1B['+';'.join(map(str, v))+'m'
kemudianprint ' '.join([d(k,i)+str(i%10)+d(0) for i in range(30,38)+range(40,48) for k in range(2)])
Saya merespons karena saya menemukan cara untuk menggunakan kode ANSI pada Windows 10, sehingga Anda dapat mengubah warna teks tanpa modul apa pun yang tidak ada di dalamnya:
Garis yang membuat pekerjaan ini adalah
os.system("")
, atau panggilan sistem lainnya, yang memungkinkan Anda untuk mencetak kode ANSI di Terminal:Catatan: Meskipun ini memberikan opsi yang sama dengan opsi Windows lainnya, Windows tidak mendukung penuh kode ANSI, bahkan dengan trik ini. Tidak semua warna dekorasi teks berfungsi dan semua warna 'cerah' (Kode 90-97 dan 100-107) ditampilkan sama dengan warna biasa (Kode 30-37 dan 40-47)
Sunting : Terima kasih kepada @jl untuk menemukan metode yang lebih pendek.
tl; dr : Tambahkan di
os.system("")
dekat bagian atas file Anda.Versi Python: 3.6.7
sumber
if sys.platform.lower() == "win32": os.system('color')
lebih jauh hanya dengan menggantinya dengan hanyaos.system('')
. Tidak diperlukan kondisi, dan kodenya berjalan di Windows 10 dan Linux (saat saya mengujinya). Seperti yang Anda lihat, Anda tidak perlu melakukan panggilan sistem kecolor
. Panggilan kedir
,cd
,abcdef
, dan hanya bekerja dengan baik string kosong (meskipun string non-kosong kemungkinan akan mencetak output yang Anda tidak ingin melihat).Cara favorit saya adalah dengan perpustakaan Blessings (pengungkapan penuh: saya menulisnya). Sebagai contoh:
Untuk mencetak bata berwarna, cara yang paling dapat diandalkan adalah dengan mencetak ruang dengan warna latar belakang. Saya menggunakan teknik ini untuk menggambar progress bar di hidung-progresif :
Anda dapat mencetak di lokasi tertentu juga:
Jika Anda harus bermain-main dengan kemampuan terminal lain selama permainan Anda, Anda bisa melakukannya juga. Anda dapat menggunakan pemformatan string standar Python agar tetap dapat dibaca:
Hal yang menyenangkan tentang Berkat adalah bahwa ia melakukan yang terbaik untuk bekerja pada semua jenis terminal, bukan hanya terminal ANSI (sangat umum). Itu juga menjaga urutan melarikan diri yang tidak terbaca dari kode Anda sambil tetap ringkas untuk digunakan. Selamat bersenang-senang!
sumber
getattr
jika Anda membutuhkannya. Atau lebih mungkin, buat saja string format secara dinamis.can just pass
fungsi python.sty mirip dengan colorama, tetapi kurang verbose, mendukung 8bit dan 24bit (rgb) warna, memungkinkan Anda untuk mendaftarkan gaya Anda sendiri, mendukung mematikan, sangat fleksibel, didokumentasikan dengan baik dan banyak lagi.
Contoh:
cetakan:
Demo:
sumber
menghasilkan kelas dengan semua warna menggunakan for loop untuk mengulangi setiap kombinasi warna hingga 100, lalu menulis kelas dengan warna python. Salin dan tempel sesuka Anda, GPLv2 oleh saya:
sumber
Coba kode sederhana ini
sumber
Pada Windows Anda dapat menggunakan modul 'win32console' (tersedia dalam beberapa distribusi Python) atau modul 'ctypes' (Python 2.5 dan lebih tinggi) untuk mengakses API Win32.
Untuk melihat kode lengkap yang mendukung kedua cara, lihat kode pelaporan konsol warna dari Testoob .
contoh ctypes:
sumber
Bodohnya sederhana berdasarkan jawaban @ joeld
Lalu saja
sumber
print
-pengganti ? Keberatan dibatalkan.print
orang harus memastikan untuk mereplikasi fungsinya dengan benar.def purple(cls, *args, **kwargs): print(cls.PURPLE, *args, cls.END, **kwargs)
</code>Saya telah memasukkan jawaban @ joeld ke dalam modul dengan fungsi global yang dapat saya gunakan di mana saja dalam kode saya.
file: log.py
gunakan sebagai berikut:
sumber
Untuk Windows Anda tidak dapat mencetak ke konsol dengan warna kecuali Anda menggunakan win32api.
Untuk Linux sesederhana menggunakan cetak, dengan urutan pelarian yang diuraikan di sini:
Warna
Untuk karakter yang dicetak seperti kotak, itu sangat tergantung pada font apa yang Anda gunakan untuk jendela konsol. Simbol pound berfungsi dengan baik, tetapi tergantung pada font:
sumber
sumber
Saya akhirnya melakukan ini, saya merasa itu paling bersih:
sumber
Membangun jawaban @ joeld, menggunakan https://pypi.python.org/pypi/lazyme
pip install -U lazyme
:Tangkapan layar:
Beberapa pembaruan
color_print
dengan format baru, misalnya:Catatan:
italic
,fast blinking
danstrikethrough
mungkin tidak bekerja pada semua terminal, tidak bekerja pada Mac / Ubuntu.Misalnya
Tangkapan layar:
sumber
Coba online
sumber
perhatikan seberapa baik
with
kata kunci bercampur dengan pengubah seperti ini yang perlu diatur ulang (menggunakan Python 3 dan Colorama):sumber
print(Style.BRIGHT + "Header Test")
danprint (Style.DIM + word)
untuk membuat prompt yang sangat bagus.contextlib
untuk Py3.@contextlib.contextmanager
dekorator di atasnya, bukan?Anda dapat menggunakan implementasi Python dari perpustakaan kutukan: http://docs.python.org/library/curses.html
Juga, jalankan ini dan Anda akan menemukan kotak Anda:
sumber
Anda bisa menggunakan CLINT:
Dapatkan dari GitHub .
sumber
Saya tahu bahwa saya terlambat. Tapi, saya punya perpustakaan bernama ColorIt . Ini sangat sederhana.
Berikut ini beberapa contohnya:
Ini memberi Anda:
Perlu juga dicatat bahwa ini adalah platform silang dan telah diuji pada mac, linux, dan windows.
Anda mungkin ingin mencobanya: https://github.com/CodeForeverAndEver/ColorIt
Catatan: Berkedip, miring, tebal, dll. Akan ditambahkan dalam beberapa hari.
sumber
Jika Anda memprogram permainan, mungkin Anda ingin mengubah warna latar belakang dan hanya menggunakan spasi? Sebagai contoh:
sumber
Jika Anda menggunakan Windows, maka ini dia!
sumber
print("%X --> %s" % (color, "Have a fine day!"), end='', flush=True)
Jika Anda menggunakan Django
foto:
(Saya biasanya menggunakan output berwarna untuk debugging di terminal runserver jadi saya menambahkannya.)
Anda dapat menguji apakah itu diinstal di mesin Anda:
$ python -c "import django; print django.VERSION"
Untuk menginstalnya periksa: Cara menginstal Django
Cobalah!!
sumber
Inilah contoh kutukan:
sumber
https://raw.github.com/fabric/fabric/master/fabric/colors.py
sumber
asciimatics menyediakan dukungan portabel untuk membangun UI teks dan animasi:
Asciicast:
sumber
Modul pypi lain yang membungkus fungsi cetak python 3:
https://pypi.python.org/pypi/colorprint
Dapat digunakan dalam python 2.x jika Anda juga
from __future__ import print
. Berikut ini adalah contoh python 2 dari halaman modul pypi:Keluaran "Halo, dunia!" dengan kata-kata berwarna biru dan tanda seru berwarna merah tebal dan berkedip.
sumber