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
- window_name window-name
Options¶
- -S socket-path
pass-through for tmux -S
- -L socket-name
pass-through for tmux -L
- -c
instead of opening shell, execute python code in libtmux and exit
- --use-pythonrc
load PYTHONSTARTUP env var and ~/.pythonrc.py script in --code
- --no-startup
load PYTHONSTARTUP env var and ~/.pythonrc.py script in --code
- --use-vi-mode
use vi-mode in ptpython/ptipython
- --no-vi-mode
use vi-mode in ptpython/ptipython
- --best
use best shell available in site packages
- --pdb
use plain pdb
- --code
use stdlib's code.interact()
- --ptipython
use ptpython + ipython
- --ptpython
use ptpython
- --ipython
use ipython
- --bpython
use bpython
Directly enter commands¶
$ tmuxp shell -c 'python code'
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 oldbreakpoint()(python 3.7+) orpdb.set_trace--code: Drop intocode.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