tmuxp shell

Launch an interactive Python shell with libtmux objects pre-loaded. Similar to Django’s shell command, this provides quick access to your tmux server, sessions, windows, and panes for scripting and debugging.

Command

Launch interactive Python shell with tmux server, session, window and pane.

Usage

usage: tmuxp shell [-h] [-S socket-path] [-L socket-name] [-c COMMAND]
                   [--best | --pdb | --code | --ptipython | --ptpython |
                   --ipython | --bpython] [--use-pythonrc] [--no-startup]
                   [--use-vi-mode] [--no-vi-mode]
                   [session-name] [window-name]

Examples

$ tmuxp shell
$ tmuxp shell -L mysocket
$ tmuxp shell -c 'print(server.sessions)'
$ tmuxp shell --best

Positional Arguments

session_name session-name
Default
None
window_name window-name
Default
None

Options

-S socket-path

pass-through for tmux -S

Default
None
-L socket-name

pass-through for tmux -L

Default
None
-c

instead of opening shell, execute python code in libtmux and exit

Default
None
--use-pythonrc

load PYTHONSTARTUP env var and ~/.pythonrc.py script in --code

Default
False
--no-startup

load PYTHONSTARTUP env var and ~/.pythonrc.py script in --code

Default
False
--use-vi-mode

use vi-mode in ptpython/ptipython

Default
False
--no-vi-mode

use vi-mode in ptpython/ptipython

Default
False
--best

use best shell available in site packages

Default
best
--pdb

use plain pdb

Default
None
--code

use stdlib's code.interact()

Default
None
--ptipython

use ptpython + ipython

Default
None
--ptpython

use ptpython

Default
None
--ipython

use ipython

Default
None
--bpython

use bpython

Default
None

Directly enter commands

$ tmuxp shell -c 'python code'
../_images/tmuxp-shell.gif

Interactive usage

Launch into a Python console with libtmux objects. Compare to django’s shell.

Automatically preloads current tmux server, session, window pane. Pass additional arguments to select a specific one of your choice:

(Pdb) server
<libtmux.server.Server object at 0x7f7dc8e69d10>
(Pdb) server.sessions
[Session($1 your_project)]
(Pdb) session
Session($1 your_project)
(Pdb) session.name
'your_project'
(Pdb) window
Window(@3 1:your_window, Session($1 your_project))
(Pdb) window.name
'your_window'
(Pdb) window.panes
[Pane(%6 Window(@3 1:your_window, Session($1 your_project)))
(Pdb) pane
Pane(%6 Window(@3 1:your_window, Session($1 your_project)))

Debugger integration

Supports PEP 553’s PYTHONBREAKPOINT and compatible debuggers, for instance ipdb:

$ pip install --user ipdb

Inside a uv-managed project you can add ipdb as a development dependency:

$ uv add --dev ipdb

For a pipx-style ad hoc install, run it through uvx:

$ uvx --from ipdb ipdb3 --help
$ env PYTHONBREAKPOINT=ipdb.set_trace tmuxp shell

Code execution

You can also pass in python code directly, similar to python -c, do this via tmuxp -c:

$ tmuxp shell -c 'print(session.name); print(window.name)'
my_server
my_window
$ tmuxp shell my_server -c 'print(session.name); print(window.name)'
my_server
my_window
$ tmuxp shell my_server my_window -c 'print(session.name); print(window.name)'
my_server
my_window
$ tmuxp shell my_server my_window -c 'print(window.name.upper())'
MY_WINDOW

Assuming inside a tmux pane or one is attached on default server:

$ tmuxp shell -c 'print(pane.id); print(pane.window.name)'
%2
my_window

Shell detection

tmuxp shell detects the richest shell available in your site packages, you can also pick your shell via args:

  • --pdb: Use plain old breakpoint() (python 3.7+) or pdb.set_trace

  • --code: Drop into code.interact, accepts --use-pythonrc

  • --bpython: Drop into bpython

  • --ipython: Drop into ipython

  • --ptpython: Drop into ptpython, accepts --use-vi-mode

  • --ptipython: Drop into ipython + ptpython, accepts --use-vi-mode