Python cmd2:提示符定制、输出重定向与管道

1274 字
6 分钟
Python cmd2:提示符定制、输出重定向与管道

提示符#

cmd2 在请求用户输入之前会发出一个可配置的提示符。

自定义提示符#

此提示符可以通过设置 cmd2.Cmd.prompt 实例属性来配置。它包含应作为用户输入提示符打印的字符串。参阅 getting_started.py 示例了解静态设置提示符的简单用例。

续行提示符#

当用户输入多行命令时,它可能跨越多行输入。第一行输入的提示符由 cmd2.Cmd.prompt 实例属性指定。后续行输入的提示符由 cmd2.Cmd.continuation_prompt 属性定义。参阅 getting_started.py 示例了解自定义续行提示符的演示。

更新提示符#

如果你希望在命令之间更新提示符,可以使用应用生命周期钩子之一,例如命令后钩子。参阅 python_scripting.py 了解动态更新提示符的示例。

异步反馈#

cmd2 提供了一个函数来向用户提供异步反馈,而不会干扰命令行。这允许在用户仍在提示符处输入文本时提供反馈。

  • cmd2.Cmd.add_alert

异步反馈机制#

警报可以通过两种方式与 CLI 交互:

  1. 消息打印:可以在当前提示行上方直接打印消息
  2. 提示符更新:可以动态替换活动提示符的文本以反映变化的状态
NOTE

为确保用户界面保持准确,如果警报是在当前提示符渲染之前创建的,则提示符更新将被忽略。这可以防止旧警报覆盖较新的提示符,尽管警报的消息仍会被打印。

终端窗口管理#

cmd2 还提供了一个函数来更改终端窗口的标题。

  • cmd2.Cmd.set_window_title

理解这些函数的最简单方式是参阅 async_printing.py 示例了解演示。

底部工具栏#

cmd2 支持一个可选的、持久的底部工具栏,在应用空闲等待输入时始终显示在终端窗口底部。

启用工具栏#

要启用工具栏,在 cmd2.Cmd.__init__ 构造函数中设置 bottom_toolbar=True

class App(cmd2.Cmd):
def __init__(self):
super().__init__(bottom_toolbar=True)

自定义工具栏内容#

你可以通过重写 cmd2.Cmd.get_bottom_toolbar 方法来自定义工具栏的内容。此方法应返回一个字符串或 (style, text) 元组列表用于格式化文本。

def get_bottom_toolbar(self) -> list[str | tuple[str, str]] | None:
return [
('ansigreen', 'My Application Name'),
('', ' - '),
('ansiyellow', 'Current Status: Idle'),
]

刷新工具栏#

由于工具栏由 prompt-toolkit 作为提示符的一部分渲染,它会在提示符刷新时自然重绘。如果你希望工具栏自动更新(例如显示时钟),可以使用后台线程定期调用 app.invalidate()

参阅 getting_started.py 示例了解此技术的演示。

输出重定向与管道#

与 POSIX shell 类似,命令的输出可以被重定向和/或管道传递。此功能完全跨平台,在 Windows、macOS 和 Linux 上的工作方式相同。

输出重定向#

重定向到文件#

cmd2 命令的输出重定向到文件的方式与 POSIX shell 中相同:

  • 使用 > 发送到文件,如 mycommand args > filename.txt
  • 使用 >> 追加到文件,如 mycommand args >> filename.txt

如果你需要在命令中包含任何这些重定向字符,可以将它们用引号括起来:mycommand 'with > in the argument'

重定向到剪贴板#

cmd2 输出重定向支持大多数 shell 中没有的额外功能——如果 >>> 后面的文件名留空,则输出被重定向到操作系统剪贴板,以便可以粘贴到另一个程序中。

  • 使用 mycommand args > 覆盖剪贴板
  • 使用 mycommand args >> 追加到剪贴板

管道#

cmd2 命令的输出管道传递给 shell 命令的方式与 POSIX shell 中相同:

  • 使用 | 作为 shell 命令的输入管道传递,如 mycommand args | wc

多管道和重定向#

支持多个管道,后面可选择跟随重定向。因此可以执行类似以下的操作:

(Cmd) help | grep py | wc > output.txt

上述运行 help 命令,将其输出管道传递给搜索包含 py 的行的 grep,然后将 grep 的输出管道传递给 wc “单词计数”命令,最后将该输出重定向到名为 output.txt 的文件。

禁用重定向#

NOTE

如果你希望禁用 cmd2 的输出重定向和管道功能,可以通过将 cmd2.Cmd 类实例的 allow_redirection 属性设为 False 来实现。例如,如果你出于安全原因希望限制最终用户写入磁盘或与 shell 命令交互的能力时,这会很有用:

from cmd2 import Cmd
class App(Cmd):
def __init__(self):
super().__init__(allow_redirection=False)

cmd2 的解析器仍然会将 >>>| 符号视为输出重定向和管道符号,并相应地从命令行参数中去除它们之后的参数。但命令的输出不会被重定向到文件或管道传递给 shell 命令。

重定向的限制#

WARNING

cmd2 应用中的重定向和管道有一些限制:

  • 只能管道传递给 shell 命令,不能传递给其他 cmd2 应用命令
  • stdout 会被重定向/管道传递,stderr 不会

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Python cmd2:提示符定制、输出重定向与管道
https://firefly.cuteleaf.cn/posts/cmd2/features/prompt_redirection/
作者
Shasnow
发布于
2026-05-28
许可协议
Unlicensed

评论区

Profile Image of the Author
Shasnow
Hello, I'm Shasnow.
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
22
分类
4
标签
20
总字数
68,022
运行时长
0
最后活动
0 天前

文章目录