Skip to main content

Display all Python process output character-by-character

Project description

dramatic

PyPI - Version License Tests Codecov

The dramatic module includes utilities to cause all text output to display character-by-character (it prints dramatically).

Note: This project is based on a Python Morsels exercise. If you're working on that exercise right now, please don't look at the source code for this! 😉

an adorable snake taking a bite out of a cookie with the words Python Morsels next to it (Python Morsels logo)

dramatic printing within a terminal

Usage

The dramatic module is available on PyPI. You can install it with pip:

$ python3 -m pip install dramatic

There are four primary ways to use the utilities in the dramatic module:

  1. As a context manager that temporarily makes output display dramatically
  2. As a decorator that temporarily makes output display dramatically
  3. Using a dramatic.start() function that makes output display dramatically
  4. Using a dramatic.print function to display specific text dramatically

Dramatic Context Manager

The dramatic.output context manager will temporarily cause all standard output and standard error to display dramatically:

import dramatic

def main():
    print("This function prints")

with dramatic.output:
    main()

To change the printing speed from the default of 75 characters per second to another value (30 characters per second in this case) use the at_speed method:

import dramatic

def main():
    print("This function prints")

with dramatic.output.at_speed(30):
    main()

Example context manager usage:

dramatic.output context manager demo

Dramatic Decorator

The dramatic.output decorator will cause all standard output and standard error to display dramatically while the decorated function is running:

import dramatic

@dramatic.output
def main():
    print("This function prints")

main()

The at_speed method works as a decorator as well:

import dramatic

@dramatic.output.at_speed(30)
def main():
    print("This function prints")

main()

Example decorator usage:

dramatic.output decorator demo

Manually Starting and Stopping

Instead of enabling dramatic printing temporarily with a context manager or decorator, the dramatic.start function may be used to enable dramatic printing:

import dramatic

def main():
    print("This function prints")

dramatic.start()
main()

The speed keyword argument may be used to change the printing speed (in characters per second):

import dramatic

def main():
    print("This function prints")

dramatic.start(speed=30)
main()

To make only standard output dramatic (but not standard error) pass stderr=False to start:

import dramatic

def main():
    print("This function prints")

dramatic.start(stderr=False)
main()

To disable dramatic printing, the dramatic.stop function may be used. Here's an example context manager that uses both dramatic.start and dramatic.stop:

import dramatic


class CustomContextManager:
    def __enter__(self):
        print("Printing will become dramatic now")
        dramatic.start()
    def __exit__(self):
        dramatic.stop()
        print("Dramatic printing has stopped")

Example start and stop usage:

dramatic.start decorator demo

Dramatic Print

The dramatic.print function acts just like the built-in print function, but it prints dramatically:

import dramatic
dramatic.print("This will print some text dramatically")

Dramatic Interpreter

To start a dramatic Python REPL:

$ python3 -m dramatic
>>>

To dramatically run a Python module:

$ python3 -m dramatic -m this

To dramatically run a Python file:

$ python3 -m dramatic hello_world.py

The dramatic module also accepts a --speed argument to set the characters printed per second. In this example we're increasing the speed from 75 characters-per-second to 120:

dramatic module running demo

Maximum Drama

Want to make your Python interpreter dramatic by default?

Run the dramatic module as a script with the --max-drama argument to modify Python so that all your Python programs will print dramatically:

$ python3 -m dramatic --max-drama
This will cause all Python programs to run dramatically.
Running --min-drama will undo this operation.
Are you sure? [y/N]

If the drama is too much, run the module again with the argument --min-drama to undo:

$ python3 -m dramatic --min-drama
Deleted file /home/trey/.local/lib/python3.12/site-packages/dramatic.pth
Deleted file /home/trey/.local/lib/python3.12/site-packages/_dramatic.py
No drama.

Other Features

Other features of note:

  • Pressing Ctrl-C while text is printing dramatically will cause the remaining text to print immediately.
  • Dramatic printing is automatically disabled when the output stream is piped to a file (e.g. python my_script.py > output.txt)

Credits

This package was inspired by the dramatic print Python Morsels exercise, which was partially inspired by Brandon Rhodes' adventure Python port (which displays its text at 1200 baud).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dramatic-0.4.0a1.tar.gz (502.5 kB view details)

Uploaded Source

Built Distribution

dramatic-0.4.0a1-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file dramatic-0.4.0a1.tar.gz.

File metadata

  • Download URL: dramatic-0.4.0a1.tar.gz
  • Upload date:
  • Size: 502.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.25.2

File hashes

Hashes for dramatic-0.4.0a1.tar.gz
Algorithm Hash digest
SHA256 7bbcd0ab675e0d1a74d590236aef03080493331e9edb68ec59bfa5e698984696
MD5 24ba7bffae03effb345ebe40627ff21e
BLAKE2b-256 219d0afb950a4815c44615f271e26b4f7ff3625633c87ee435d355f75d2e1a2b

See more details on using hashes here.

File details

Details for the file dramatic-0.4.0a1-py3-none-any.whl.

File metadata

  • Download URL: dramatic-0.4.0a1-py3-none-any.whl
  • Upload date:
  • Size: 6.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.25.2

File hashes

Hashes for dramatic-0.4.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 0bd8ee966f166c053f81d20249fd33cac5e6fdaa2fa86e971c26bd037821aa17
MD5 e7b7ede7a8b8985aa7ee6cc16efe9a38
BLAKE2b-256 c54706614efbcab85fbba6d5d842e4009a8ab8c30a4eb81b8800d1417c1bc0de

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page