Python cmd2:操作系统集成
- 1Python cmd2:构建强大的命令行解释器
- 2Python cmd2:表格创建
- 3Python cmd2:测试指南
- 4Python cmd2:大版本升级指南
- 5Python cmd2:功能总览
- 6Python cmd2:混入类(Mixin)详解
- 7Python cmd2:主题
- 8Python cmd2:注解式参数处理
- 9Python cmd2:参数处理详解
- 10Python cmd2:操作系统集成本文
- 11Python cmd2:钩子机制详解
- 12Python cmd2:脚本功能详解
- 13Python cmd2:快捷方式、别名与宏
- 14Python cmd2:命令、补全与禁用命令
- 15Python cmd2:命令历史功能详解
- 16Python cmd2:模块化命令详解
- 17Python cmd2:嵌入式 Python Shell、生成输出与帮助系统
- 18Python cmd2:设置系统与插件系统详解
- 19Python cmd2:提示符定制、输出重定向与管道
- 20Python cmd2:异步命令、内置命令与剪贴板集成
- 21Python cmd2:应用初始化、多行命令与启动命令
- 22Python cmd2:杂项功能与应用打包分发
操作系统集成
如何重定向输出
参阅输出重定向和管道。
在 cmd2 中执行操作系统命令
cmd2 包含一个 shell 命令,它在操作系统 shell 中执行其参数:
(Cmd) shell ls -al如果你使用 cmd2 中定义的默认快捷方式,你将获得一个 ! 快捷方式用于 shell,允许你输入:
(Cmd) !ls -alcmd2 在运行 shell 命令的整个过程中提供用户友好的 Tab 补全——首先是 shell 命令名称本身,然后是参数部分中的文件路径。
然而,cmd2 应用实际上成为了 shell,所以如果你为特定的 shell(如 bash、zsh、fish 等)配置了_额外的_ shell 补全,这在 cmd2 中将不可用。
编辑器
cmd2 包含内置的 edit 命令,它运行文本编辑器并可选择打开文件:
(Cmd) edit foo.txt使用的编辑器由 editor 可设置参数决定,可以是文本编辑器(如 vim)或图形编辑器(如 VSCode)。设置方式:
set editor <program_name>如果你设置了 EDITOR 环境变量,这将是 editor 的默认值。如果没有,cmd2 将尝试在你操作系统的常见编辑器列表中搜索。
终端分页器
任何命令的输出都可以使用 cmd2.Cmd.ppaged 方法逐页显示。
或者,可以使用 ! 快捷方式直接调用终端分页器:
(Cmd) !less foo.txt一旦你进入终端分页器,该程序就暂时控制了你的终端,而不是 cmd2。通常你可以使用方向键或 <PageUp>/<PageDown> 键滚动,或输入 q 退出分页器并将控制权返回给 cmd2 应用。
退出码
cmd2 应用的 self.exit_code 属性控制 cmdloop() 完成时返回的退出码。你的工作是确保在应用退出时通过调用 sys.exit(app.cmdloop()) 将此退出码发送给 shell。
带参数调用
通常你会通过输入以下内容来调用 cmd2 程序:
$ python mycmd2program.py或:
$ mycmd2program.py这两种方法都会启动你的程序并进入 cmd2 命令循环,允许用户输入命令,然后由你的程序执行。
你可能希望在不提示用户输入任何内容的情况下在程序中执行命令。有几种方法可以完成此任务。其中一种方法是通过标准输入将命令及其参数管道传递给你的程序。你不需要对程序做任何事情就可以使用此技术。
$ echo "speak -p some words" | uv run examples/cmd_as_argument.pyomesay ordsway使用相同的方法,你可以创建一个包含要运行的命令的文本文件,文件中每行一个命令。假设你的文件名为 somecmds.txt:
c:\cmd2> type somecmds.txt | uv run examples/cmd_as_argument.pyomesay ordsway默认情况下,cmd2 程序还会查找从操作系统 shell 传递的参数作为命令,并在进入命令循环之前执行这些命令:
$ uv run examples/cmd_as_argument.py help你可能需要对从操作系统 shell 传递的命令行参数有更多控制。例如,你可能有一个命令本身接受参数,甚至选项字符串。假设你想从操作系统 shell 运行 speak 命令,但让它用 pig latin(儿童黑话)说出来——只需将命令及其参数用双引号或单引号括起来即可:
$ uv run examples/cmd_as_argument.py "speak -p hello there"ellohay heretay(Cmd)如果你想使用自定义 argparse 解析器来收集高层应用参数,同时仍希望在调用时将额外的未知参数作为命令传递,请参阅 argparse_example.py 示例。使用这种方法,你可以这样调用它:
$ uv run examples/argparse_example.py -c blue help查看该示例的源代码,特别是 if __name__ == "__main__": 代码块,了解实现技巧。
从其他 CLI/CLU 工具自动化 cmd2 应用
虽然 cmd2 旨在创建进入 Read-Evaluate-Print-Loop(REPL)的交互式命令行应用,但很多时候将 cmd2 应用作为一次性运行的命令行实用程序用于自动化和脚本目的非常有用。
这可以通过结合 cmd2 的以下功能轻松实现:
- 带参数调用
cmd2应用的能力 - 离开
cmd2应用时设置退出码的能力 - 使用
quit命令退出cmd2应用的能力
$ uv run examples/cmd_as_argument.py "speak -p hello there" quitellohay heretay$支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!













