Skip to content
claudewheel.pty_runner
Edit
On this page

Run a child process under a PTY, proxying the real terminal and capturing its output.

#claudewheel.pty_runner

#claudewheel.pty_runner

Run a child process under a PTY, proxying the real terminal and capturing its output.

#_copy_winsize

python
def _copy_winsize(src_fd: int, dst_fd: int) -> None

Copy the window size from src_fd to dst_fd; ignore failures.

#run_under_pty

python
def run_under_pty(argv: list[str], env: dict[str, str], *, input_bytes: bytes | None=None, proxy_terminal: bool=True) -> tuple[int, bytes]

Run argv with env under a fresh PTY; return (exit_code, captured_bytes).

With proxy_terminal=True (the default) the real terminal is opened via /dev/tty (stdin may be piped), put into full raw mode so every byte -- including Ctrl-C -- is forwarded to the child, and window-size changes are propagated on SIGWINCH. Child output is both written through to the real terminal and captured. Raises RuntimeError if /dev/tty cannot be opened.

With proxy_terminal=False no real terminal is touched: the child still runs under a PTY, but output is only captured. This is the headless mode used by tests and non-interactive callers.

input_bytes, if given, is scripted input written to the PTY master right after the child starts -- it lets callers (and tests) drive an interactive child without a human typing.

More tools from this site

  • claudestream Drive Claude Code from Python: run it as a subprocess and read its output as typed events, with async and sync sessions, sandbox policies, and tools you define in Python
  • dirstat Fast, single-binary directory statistics CLI: every file under a tree grouped by format, with counts, sizes, and lines of code, as a colored terminal table or as JSON
  • fastware A batteries-included ASGI framework: msgspec JSON, a managed Granian server, dependency injection, SSE, WebSockets, auth, and a test client
  • go-toml-edit Zero-dep TOML editing library for Go with comment preservation
  • howmuchleft The fastest Claude Code statusline: context window, 5-hour, and weekly limit usage as three customizable gradient bars, rendering in about 6 ms
  • orxtra
  • pgdesign
  • predraw Declarative rendering pipeline: describe a scene in JSON and get SVG, PNG and WebP out, with light and dark style tokens, reusable components and text converted to path outlines
  • reposummary Turn a git repository's history into a Markdown journal: pick a time window or revision range and get a readable digest of what changed, optionally narrated by an LLM
  • rlsbl Release orchestration and project scaffolding CLI that bumps versions, validates a structured JSONL changelog, tags only the commit CI verified, and publishes to npm, PyPI, Go and more
  • safegit git wrapper CLI that gives each commit its own temporary index and retries ref updates on conflict, so concurrent agents share one repository
  • saferm Command-line replacement for rm that archives every deletion with a mandatory reason and the context it ran in, so deleted files can be listed, inspected and restored
  • selfdoc Static Site Generator that builds a project's documentation site directly from its source code, so the docs can never drift from the code they describe, with SEO/AEO, first-class blog, search, and cross-project linking built in
  • strictcli
  • stricttest An always-on test-isolation floor: a pytest plugin and a Go env-hygiene module that make a test suite structurally unable to reach real credentials, the real HOME, the network, or the development repository.
  • wesktop A Python framework that turns an ASGI web app into a desktop application, serving it from a local Granian server and displaying it in a native OS window via pywebview
Search