Skip to main content

A background command handler for python's command-line interface.

Project description

InputHandler Library

A lightweight Python library for creating interactive command-line interfaces with custom command registration, input handling, and clean log output. It supports synchronous and asynchronous modes, threaded input processing, and enhanced logging.

Features

  • Command Registration: Register commands with decorators and descriptions.
  • Threaded Input: Non-blocking input handling by default.
  • Safe Printing: Logs appear above the input line, preserving your typed text and cursor position.
  • Command History: Navigate recent commands with Up/Down arrow keys.
  • Sync & Async: Support for both synchronous and asynchronous (asyncio) applications.
  • Colored Logging: Built-in support for colored log messages.

Installation

pip install cli_ih

Quick Start (Synchronous)

from cli_ih import InputHandler, safe_print

handler = InputHandler(cursor="> ")

# Use safe_print instead of print to keep the input line clean!
@handler.command(name="greet", description="Greets the user.")
def greet(name):
    safe_print(f"Hello, {name}!")

@handler.command(name="add", description="Adds two numbers.")
def add(a, b):
    safe_print(int(a) + int(b))

handler.start()

# Using safe_print allows you to print logs in the background 
# without messing up the user's current input line.

Async Client Example

The AsyncInputHandler integrates with asyncio. The start() method is non-blocking when thread_mode=True (default).

import asyncio
from cli_ih import AsyncInputHandler, safe_print

handler = AsyncInputHandler(cursor="Async> ")

@handler.command(name="greet", description="Greets the user asynchronously.")
async def greet(name):
    await asyncio.sleep(1)
    safe_print(f"Hello, {name}")

@handler.command(name="add", description="Adds two numbers.")
async def add(a, b):
    safe_print(int(a) + int(b))

# Start the handler (runs in a separate thread by default)
handler.start()

# Keep the main thread alive or run your main event loop
async def main():
    while handler.is_running:
        await asyncio.sleep(1)

if __name__ == "__main__":
    asyncio.run(main())

Key Considerations

Safe Printing

Always use from cli_ih import safe_print for outputting text to the console. This utility automatically detects the active input handler and ensures that your log message is printed above the current input line, preserving the user's cursor and any text they are currently typing.

from cli_ih import safe_print

# Good
safe_print("Log message")

# Avoid (might disrupt input line)
print("Log message")

Thread Mode

Both InputHandler and AsyncInputHandler accept a thread_mode parameter (default True).

  • thread_mode=True: The input loop runs in a separate thread. start() returns immediately.
  • thread_mode=False: The input loop runs in the current thread. start() blocks until exit.

Command History

Use the Up and Down arrow keys to cycle through your previously entered commands, just like in a standard terminal.

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

cli_ih-0.7.1.2.tar.gz (9.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cli_ih-0.7.1.2-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file cli_ih-0.7.1.2.tar.gz.

File metadata

  • Download URL: cli_ih-0.7.1.2.tar.gz
  • Upload date:
  • Size: 9.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for cli_ih-0.7.1.2.tar.gz
Algorithm Hash digest
SHA256 5793fec16ee6b221296008eaa50e4c30f7473431be4a52a6cd226fd9677b9bb6
MD5 83f46725bcc6e749f69ff0653a3fe8b1
BLAKE2b-256 6e7d01cba834ff3d603025ac98934f653013bc4ade26780dfe5998c6876e2c3e

See more details on using hashes here.

File details

Details for the file cli_ih-0.7.1.2-py3-none-any.whl.

File metadata

  • Download URL: cli_ih-0.7.1.2-py3-none-any.whl
  • Upload date:
  • Size: 11.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for cli_ih-0.7.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5b4a0c8cc2afad4037bd33f54d7e414721f88217faa452d893c1f6aaa72a4a05
MD5 d2c14d5e0a8c99845b5a8a2ad8ed08db
BLAKE2b-256 b2509d1a6df196101791b0e93accef5996e2a88b663539a985782546c04c499e

See more details on using hashes here.

Supported by

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