跳转到主要内容

为tmux提供ORM封装的Python类型库。

项目描述

libtmux

libtmux是一个类型化Python库,它提供了与终端多路复用器tmux交互的封装。您可以使用它来管理tmux服务器、会话、窗口和面板。此外,libtmux还支持tmuxp,一个tmux工作空间管理器。

Python Package Docs Build Status Code Coverage License

libtmux基于tmux的目标格式创建对象映射,以便遍历、检查和交互式地与实时tmux会话。

查看文档API信息和架构细节

安装

$ pip install --user libtmux

打开tmux会话

会话名称 foo,窗口名称 bar

$ tmux new-session -s foo -n bar

通过Python控制您的tmux会话

$ python

使用 ptpythonipython 等工具,享受带有自动补全功能的良好壳环境

$ pip install --user ptpython
$ ptpython

连接到实时tmux会话

>>> import libtmux
>>> svr = libtmux.Server()
>>> svr
Server(socket_path=/tmp/tmux-.../default)

技巧:您还可以使用 tmuxptmuxp shell 直接进入您当前的tmux服务器/会话/窗口面板。

运行任何tmux命令,无关上下文

尊重tmux套接字名称和路径

>>> server = Server(socket_name='libtmux_doctest')
>>> server.cmd('display-message', 'hello world')
<libtmux...>

新会话

>>> server.cmd('new-session', '-d', '-P', '-F#{session_id}').stdout[0]
'$2'
>>> session.cmd('new-window', '-P').stdout[0]
'libtmux...:2.0'

从原始命令输出,到丰富的 Window 对象(在实践中,您会使用 Session.new_window()

>>> Window.from_window_id(window_id=session.cmd('new-window', '-P', '-F#{window_id}').stdout[0], server=session.server)
Window(@2 2:..., Session($1 libtmux_...))

从窗口创建面板

>>> window.cmd('split-window', '-P', '-F#{pane_id}').stdout[0]
'%2'

直接将原始输出输出到 Pane

>>> Pane.from_pane_id(pane_id=window.cmd('split-window', '-P', '-F#{pane_id}').stdout[0], server=window.server)
Pane(%... Window(@1 1:..., Session($1 libtmux_...)))

列出会话

>>> server.sessions
[Session($1 ...), Session($0 ...)]

按属性过滤会话

>>> server.sessions.filter(history_limit='2000')
[Session($1 ...), Session($0 ...)]

直接查找

>>> server.sessions.get(session_id="$1")
Session($1 ...)

过滤会话

>>> server.sessions[0].rename_session('foo')
Session($1 foo)
>>> server.sessions.filter(session_name="foo")
[Session($1 foo)]
>>> server.sessions.get(session_name="foo")
Session($1 foo)

控制您的会话

>>> session
Session($1 ...)

>>> session.rename_session('my-session')
Session($1 my-session)

在后台创建新窗口(不要切换到它)

>>> bg_window = session.new_window(attach=False, window_name="ha in the bg")
>>> bg_window
Window(@... 2:ha in the bg, Session($1 ...))

# Session can search the window
>>> session.windows.filter(window_name__startswith="ha")
[Window(@... 2:ha in the bg, Session($1 ...))]

# Directly
>>> session.windows.get(window_name__startswith="ha")
Window(@... 2:ha in the bg, Session($1 ...))

# Clean up
>>> bg_window.kill()

关闭窗口

>>> w = session.active_window
>>> w.kill()

抓取剩余的tmux窗口

>>> window = session.active_window
>>> window.split(attach=False)
Pane(%2 Window(@1 1:... Session($1 ...)))

重命名窗口

>>> window.rename_window('libtmuxower')
Window(@1 1:libtmuxower, Session($1 ...))

分割窗口(创建新面板)

>>> pane = window.split()
>>> pane = window.split(attach=False)
>>> pane.select()
Pane(%3 Window(@1 1:..., Session($1 ...)))
>>> window = session.new_window(attach=False, window_name="test")
>>> window
Window(@2 2:test, Session($1 ...))
>>> pane = window.split(attach=False)
>>> pane
Pane(%5 Window(@2 2:test, Session($1 ...)))

在面板内输入(发送按键)

>>> pane.send_keys('echo hey send now')

>>> pane.send_keys('echo hey', enter=False)
>>> pane.enter()
Pane(%1 ...)

抓取面板的输出

>>> pane.clear()  # clear the pane
Pane(%1 ...)
>>> pane.send_keys("cowsay 'hello'", enter=True)
>>> print('\n'.join(pane.cmd('capture-pane', '-p').stdout))  # doctest: +SKIP
$ cowsay 'hello'
 _______
< hello >
 -------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
...

遍历和导航

>>> pane.window
Window(@1 1:..., Session($1 ...))
>>> pane.window.session
Session($1 ...)

Python支持

不支持/无安全发布或错误修复

  • Python 2.x:backports分支是 v0.8.x

捐赠

您的捐赠将用于新功能开发、测试和支持。您的资金将直接用于项目的维护和开发。如果您是个人,请随意捐赠您认为合适的金额,以反映您从项目中获得的收益。

请参阅https://git-pull.com/support.html上的捐赠选项。

项目详情

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

libtmux-0.37.0.tar.gz (256.3 kB 查看哈希值)

上传时间

构建分布

libtmux-0.37.0-py3-none-any.whl (56.2 kB 查看哈希值)

上传时间 Python 3

由以下支持