123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414 |
- .. image:: https://img.shields.io/pypi/v/colorama.svg
- :target: https://pypi.org/project/colorama/
- :alt: Latest Version
- .. image:: https://img.shields.io/pypi/pyversions/colorama.svg
- :target: https://pypi.org/project/colorama/
- :alt: Supported Python versions
- .. image:: https://github.com/tartley/colorama/actions/workflows/test.yml/badge.svg
- :target: https://github.com/tartley/colorama/actions/workflows/test.yml
- :alt: Build Status
- Colorama
- ========
- Makes ANSI escape character sequences (for producing colored terminal text and
- cursor positioning) work under MS Windows.
- .. |donate| image:: https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif
- :target: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=2MZ9D2GMLYCUJ&item_name=Colorama¤cy_code=USD
- :alt: Donate with Paypal
- `PyPI for releases <https://pypi.org/project/colorama/>`_ |
- `Github for source <https://github.com/tartley/colorama>`_ |
- `Colorama for enterprise on Tidelift <https://github.com/tartley/colorama/blob/master/ENTERPRISE.md>`_
- If you find Colorama useful, please |donate| to the authors. Thank you!
- Installation
- ------------
- Tested on CPython 2.7, 3.7, 3.8, 3.9 and 3.10 and Pypy 2.7 and 3.8.
- No requirements other than the standard library.
- .. code-block:: bash
- pip install colorama
- # or
- conda install -c anaconda colorama
- Description
- -----------
- ANSI escape character sequences have long been used to produce colored terminal
- text and cursor positioning on Unix and Macs. Colorama makes this work on
- Windows, too, by wrapping ``stdout``, stripping ANSI sequences it finds (which
- would appear as gobbledygook in the output), and converting them into the
- appropriate win32 calls to modify the state of the terminal. On other platforms,
- Colorama does nothing.
- This has the upshot of providing a simple cross-platform API for printing
- colored terminal text from Python, and has the happy side-effect that existing
- applications or libraries which use ANSI sequences to produce colored output on
- Linux or Macs can now also work on Windows, simply by calling
- ``colorama.just_fix_windows_console()`` (since v0.4.6) or ``colorama.init()``
- (all versions, but may have other side-effects – see below).
- An alternative approach is to install ``ansi.sys`` on Windows machines, which
- provides the same behaviour for all applications running in terminals. Colorama
- is intended for situations where that isn't easy (e.g., maybe your app doesn't
- have an installer.)
- Demo scripts in the source code repository print some colored text using
- ANSI sequences. Compare their output under Gnome-terminal's built in ANSI
- handling, versus on Windows Command-Prompt using Colorama:
- .. image:: https://github.com/tartley/colorama/raw/master/screenshots/ubuntu-demo.png
- :width: 661
- :height: 357
- :alt: ANSI sequences on Ubuntu under gnome-terminal.
- .. image:: https://github.com/tartley/colorama/raw/master/screenshots/windows-demo.png
- :width: 668
- :height: 325
- :alt: Same ANSI sequences on Windows, using Colorama.
- These screenshots show that, on Windows, Colorama does not support ANSI 'dim
- text'; it looks the same as 'normal text'.
- Usage
- -----
- Initialisation
- ..............
- If the only thing you want from Colorama is to get ANSI escapes to work on
- Windows, then run:
- .. code-block:: python
- from colorama import just_fix_windows_console
- just_fix_windows_console()
- If you're on a recent version of Windows 10 or better, and your stdout/stderr
- are pointing to a Windows console, then this will flip the magic configuration
- switch to enable Windows' built-in ANSI support.
- If you're on an older version of Windows, and your stdout/stderr are pointing to
- a Windows console, then this will wrap ``sys.stdout`` and/or ``sys.stderr`` in a
- magic file object that intercepts ANSI escape sequences and issues the
- appropriate Win32 calls to emulate them.
- In all other circumstances, it does nothing whatsoever. Basically the idea is
- that this makes Windows act like Unix with respect to ANSI escape handling.
- It's safe to call this function multiple times. It's safe to call this function
- on non-Windows platforms, but it won't do anything. It's safe to call this
- function when one or both of your stdout/stderr are redirected to a file – it
- won't do anything to those streams.
- Alternatively, you can use the older interface with more features (but also more
- potential footguns):
- .. code-block:: python
- from colorama import init
- init()
- This does the same thing as ``just_fix_windows_console``, except for the
- following differences:
- - It's not safe to call ``init`` multiple times; you can end up with multiple
- layers of wrapping and broken ANSI support.
- - Colorama will apply a heuristic to guess whether stdout/stderr support ANSI,
- and if it thinks they don't, then it will wrap ``sys.stdout`` and
- ``sys.stderr`` in a magic file object that strips out ANSI escape sequences
- before printing them. This happens on all platforms, and can be convenient if
- you want to write your code to emit ANSI escape sequences unconditionally, and
- let Colorama decide whether they should actually be output. But note that
- Colorama's heuristic is not particularly clever.
- - ``init`` also accepts explicit keyword args to enable/disable various
- functionality – see below.
- To stop using Colorama before your program exits, simply call ``deinit()``.
- This will restore ``stdout`` and ``stderr`` to their original values, so that
- Colorama is disabled. To resume using Colorama again, call ``reinit()``; it is
- cheaper than calling ``init()`` again (but does the same thing).
- Most users should depend on ``colorama >= 0.4.6``, and use
- ``just_fix_windows_console``. The old ``init`` interface will be supported
- indefinitely for backwards compatibility, but we don't plan to fix any issues
- with it, also for backwards compatibility.
- Colored Output
- ..............
- Cross-platform printing of colored text can then be done using Colorama's
- constant shorthand for ANSI escape sequences. These are deliberately
- rudimentary, see below.
- .. code-block:: python
- from colorama import Fore, Back, Style
- print(Fore.RED + 'some red text')
- print(Back.GREEN + 'and with a green background')
- print(Style.DIM + 'and in dim text')
- print(Style.RESET_ALL)
- print('back to normal now')
- ...or simply by manually printing ANSI sequences from your own code:
- .. code-block:: python
- print('\033[31m' + 'some red text')
- print('\033[39m') # and reset to default color
- ...or, Colorama can be used in conjunction with existing ANSI libraries
- such as the venerable `Termcolor <https://pypi.org/project/termcolor/>`_
- the fabulous `Blessings <https://pypi.org/project/blessings/>`_,
- or the incredible `_Rich <https://pypi.org/project/rich/>`_.
- If you wish Colorama's Fore, Back and Style constants were more capable,
- then consider using one of the above highly capable libraries to generate
- colors, etc, and use Colorama just for its primary purpose: to convert
- those ANSI sequences to also work on Windows:
- SIMILARLY, do not send PRs adding the generation of new ANSI types to Colorama.
- We are only interested in converting ANSI codes to win32 API calls, not
- shortcuts like the above to generate ANSI characters.
- .. code-block:: python
- from colorama import just_fix_windows_console
- from termcolor import colored
- # use Colorama to make Termcolor work on Windows too
- just_fix_windows_console()
- # then use Termcolor for all colored text output
- print(colored('Hello, World!', 'green', 'on_red'))
- Available formatting constants are::
- Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
- Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
- Style: DIM, NORMAL, BRIGHT, RESET_ALL
- ``Style.RESET_ALL`` resets foreground, background, and brightness. Colorama will
- perform this reset automatically on program exit.
- These are fairly well supported, but not part of the standard::
- Fore: LIGHTBLACK_EX, LIGHTRED_EX, LIGHTGREEN_EX, LIGHTYELLOW_EX, LIGHTBLUE_EX, LIGHTMAGENTA_EX, LIGHTCYAN_EX, LIGHTWHITE_EX
- Back: LIGHTBLACK_EX, LIGHTRED_EX, LIGHTGREEN_EX, LIGHTYELLOW_EX, LIGHTBLUE_EX, LIGHTMAGENTA_EX, LIGHTCYAN_EX, LIGHTWHITE_EX
- Cursor Positioning
- ..................
- ANSI codes to reposition the cursor are supported. See ``demos/demo06.py`` for
- an example of how to generate them.
- Init Keyword Args
- .................
- ``init()`` accepts some ``**kwargs`` to override default behaviour.
- init(autoreset=False):
- If you find yourself repeatedly sending reset sequences to turn off color
- changes at the end of every print, then ``init(autoreset=True)`` will
- automate that:
- .. code-block:: python
- from colorama import init
- init(autoreset=True)
- print(Fore.RED + 'some red text')
- print('automatically back to default color again')
- init(strip=None):
- Pass ``True`` or ``False`` to override whether ANSI codes should be
- stripped from the output. The default behaviour is to strip if on Windows
- or if output is redirected (not a tty).
- init(convert=None):
- Pass ``True`` or ``False`` to override whether to convert ANSI codes in the
- output into win32 calls. The default behaviour is to convert if on Windows
- and output is to a tty (terminal).
- init(wrap=True):
- On Windows, Colorama works by replacing ``sys.stdout`` and ``sys.stderr``
- with proxy objects, which override the ``.write()`` method to do their work.
- If this wrapping causes you problems, then this can be disabled by passing
- ``init(wrap=False)``. The default behaviour is to wrap if ``autoreset`` or
- ``strip`` or ``convert`` are True.
- When wrapping is disabled, colored printing on non-Windows platforms will
- continue to work as normal. To do cross-platform colored output, you can
- use Colorama's ``AnsiToWin32`` proxy directly:
- .. code-block:: python
- import sys
- from colorama import init, AnsiToWin32
- init(wrap=False)
- stream = AnsiToWin32(sys.stderr).stream
- # Python 2
- print >>stream, Fore.BLUE + 'blue text on stderr'
- # Python 3
- print(Fore.BLUE + 'blue text on stderr', file=stream)
- Recognised ANSI Sequences
- .........................
- ANSI sequences generally take the form::
- ESC [ <param> ; <param> ... <command>
- Where ``<param>`` is an integer, and ``<command>`` is a single letter. Zero or
- more params are passed to a ``<command>``. If no params are passed, it is
- generally synonymous with passing a single zero. No spaces exist in the
- sequence; they have been inserted here simply to read more easily.
- The only ANSI sequences that Colorama converts into win32 calls are::
- ESC [ 0 m # reset all (colors and brightness)
- ESC [ 1 m # bright
- ESC [ 2 m # dim (looks same as normal brightness)
- ESC [ 22 m # normal brightness
- # FOREGROUND:
- ESC [ 30 m # black
- ESC [ 31 m # red
- ESC [ 32 m # green
- ESC [ 33 m # yellow
- ESC [ 34 m # blue
- ESC [ 35 m # magenta
- ESC [ 36 m # cyan
- ESC [ 37 m # white
- ESC [ 39 m # reset
- # BACKGROUND
- ESC [ 40 m # black
- ESC [ 41 m # red
- ESC [ 42 m # green
- ESC [ 43 m # yellow
- ESC [ 44 m # blue
- ESC [ 45 m # magenta
- ESC [ 46 m # cyan
- ESC [ 47 m # white
- ESC [ 49 m # reset
- # cursor positioning
- ESC [ y;x H # position cursor at x across, y down
- ESC [ y;x f # position cursor at x across, y down
- ESC [ n A # move cursor n lines up
- ESC [ n B # move cursor n lines down
- ESC [ n C # move cursor n characters forward
- ESC [ n D # move cursor n characters backward
- # clear the screen
- ESC [ mode J # clear the screen
- # clear the line
- ESC [ mode K # clear the line
- Multiple numeric params to the ``'m'`` command can be combined into a single
- sequence::
- ESC [ 36 ; 45 ; 1 m # bright cyan text on magenta background
- All other ANSI sequences of the form ``ESC [ <param> ; <param> ... <command>``
- are silently stripped from the output on Windows.
- Any other form of ANSI sequence, such as single-character codes or alternative
- initial characters, are not recognised or stripped. It would be cool to add
- them though. Let me know if it would be useful for you, via the Issues on
- GitHub.
- Status & Known Problems
- -----------------------
- I've personally only tested it on Windows XP (CMD, Console2), Ubuntu
- (gnome-terminal, xterm), and OS X.
- Some valid ANSI sequences aren't recognised.
- If you're hacking on the code, see `README-hacking.md`_. ESPECIALLY, see the
- explanation there of why we do not want PRs that allow Colorama to generate new
- types of ANSI codes.
- See outstanding issues and wish-list:
- https://github.com/tartley/colorama/issues
- If anything doesn't work for you, or doesn't do what you expected or hoped for,
- I'd love to hear about it on that issues list, would be delighted by patches,
- and would be happy to grant commit access to anyone who submits a working patch
- or two.
- .. _README-hacking.md: README-hacking.md
- License
- -------
- Copyright Jonathan Hartley & Arnon Yaari, 2013-2020. BSD 3-Clause license; see
- LICENSE file.
- Professional support
- --------------------
- .. |tideliftlogo| image:: https://cdn2.hubspot.net/hubfs/4008838/website/logos/logos_for_download/Tidelift_primary-shorthand-logo.png
- :alt: Tidelift
- :target: https://tidelift.com/subscription/pkg/pypi-colorama?utm_source=pypi-colorama&utm_medium=referral&utm_campaign=readme
- .. list-table::
- :widths: 10 100
- * - |tideliftlogo|
- - Professional support for colorama is available as part of the
- `Tidelift Subscription`_.
- Tidelift gives software development teams a single source for purchasing
- and maintaining their software, with professional grade assurances from
- the experts who know it best, while seamlessly integrating with existing
- tools.
- .. _Tidelift Subscription: https://tidelift.com/subscription/pkg/pypi-colorama?utm_source=pypi-colorama&utm_medium=referral&utm_campaign=readme
- Thanks
- ------
- See the CHANGELOG for more thanks!
- * Marc Schlaich (schlamar) for a ``setup.py`` fix for Python2.5.
- * Marc Abramowitz, reported & fixed a crash on exit with closed ``stdout``,
- providing a solution to issue #7's setuptools/distutils debate,
- and other fixes.
- * User 'eryksun', for guidance on correctly instantiating ``ctypes.windll``.
- * Matthew McCormick for politely pointing out a longstanding crash on non-Win.
- * Ben Hoyt, for a magnificent fix under 64-bit Windows.
- * Jesse at Empty Square for submitting a fix for examples in the README.
- * User 'jamessp', an observant documentation fix for cursor positioning.
- * User 'vaal1239', Dave Mckee & Lackner Kristof for a tiny but much-needed Win7
- fix.
- * Julien Stuyck, for wisely suggesting Python3 compatible updates to README.
- * Daniel Griffith for multiple fabulous patches.
- * Oscar Lesta for a valuable fix to stop ANSI chars being sent to non-tty
- output.
- * Roger Binns, for many suggestions, valuable feedback, & bug reports.
- * Tim Golden for thought and much appreciated feedback on the initial idea.
- * User 'Zearin' for updates to the README file.
- * John Szakmeister for adding support for light colors
- * Charles Merriam for adding documentation to demos
- * Jurko for a fix on 64-bit Windows CPython2.5 w/o ctypes
- * Florian Bruhin for a fix when stdout or stderr are None
- * Thomas Weininger for fixing ValueError on Windows
- * Remi Rampin for better Github integration and fixes to the README file
- * Simeon Visser for closing a file handle using 'with' and updating classifiers
- to include Python 3.3 and 3.4
- * Andy Neff for fixing RESET of LIGHT_EX colors.
- * Jonathan Hartley for the initial idea and implementation.
|