Riposte 项目介绍
项目概述
Riposte 是一个让开发者能够轻松地为应用添加定制交互式命令行界面的工具。通过将构建 REPL(Read-Eval-Print Loop)的常见任务抽象化,Riposte 使开发者能够专注于应用的领域逻辑,而不必费神去处理底层的命令行界面实现。
Riposte 的产生源于在开发 routersploit 项目的过程中,开发团队经历了许多关于 REPL 处理的复杂问题。随着项目的扩展,命令行逻辑与业务逻辑交织在一起,使代码可读性和开发友好性下降。开发者们意识到,必须寻找一种更好的方法来解决这些问题,而 Riposte 正是为此而生。
快速开始
安装
Riposte 可以通过 PyPI 仓库获取,支持 Python 3.8 及以上版本。安装方法如下:
pip install riposte
示例用法
以下是一个使用 Riposte 创建简单计算器应用的示例代码:
from riposte import Riposte
calculator = Riposte(prompt="calc:~$ ")
MEMORY = []
@calculator.command("add")
def add(x: int, y: int):
result = f"{x} + {y} = {x + y}"
MEMORY.append(result)
calculator.success(result)
@calculator.command("multiply")
def multiply(x: int, y: int):
result = f"{x} * {y} = {x * y}"
MEMORY.append(result)
calculator.success(result)
@calculator.command("memory")
def memory():
for entry in MEMORY:
calculator.print(entry)
calculator.run()
使用该应用程序时,用户可以在命令行中输入以下命令:
calc:~$ add 2 2
[+] 2 + 2 = 4
calc:~$ multiply 3 3
[+] 3 * 3 = 9
calc:~$ memory
2 + 2 = 4
3 * 3 = 9
calc:~$
核心功能
命令注册
开发者可以使用 Riposte.command
装饰器为 REPL 注册命令,同时绑定相应的处理函数。
from riposte import Riposte
repl = Riposte()
@repl.command("hello")
def hello():
repl.success("你好,你在找我吗?")
repl.run()
在命令行中输入以下命令进行测试:
riposte:~ $ hello
[+] 你好,你在找我吗?
Riposte.command
装饰器还支持可选参数,比如 description
和 guides
,用于描述命令和定义参数解释规则。
自动补全
Riposte 支持命令的 Tab 键自动补全,开发者可以通过 Riposte.complete
装饰器注册补全函数,为特定命令提供补全选项。
参数指引
参数指引是让命令解释用户通过提示输入的参数的方式。Riposte 使用 Python 的类型提示进行参数类型判断。
打印功能
Riposte 提供了一些线程安全的打印方法,例如 print
、info
、error
、status
和 success
等,方便开发者在命令行界面中输出信息。
历史记录
命令历史记录会保存在用户的 HOME 目录下,默认最大保存 100 条记录,开发者可以通过参数自定义存储文件和记录长度。
动态提示符
Riposte 允许开发者自定义和动态调整命令提示符的样式。
横幅展示
开发者可以在启动后,使用 Banner 属性显示自定义的欢迎信息或项目 logo。
命令行参数
Riposte 提供了命令行接口,开发者可以通过 -c
开关传递命令,也可以自定义应用的命令行参数。
项目状态
Riposte 目前处于开发阶段,可以看作是 beta 版。一些概念已经在 routersploit 项目中经过验证,但未来可能会有一些改变。
贡献与版本控制
Riposte 使用 SemVer 版本控制系统。项目接受贡献,开发者可以参考项目的贡献指南了解详细的信息。
许可
Riposte 采用 MIT 许可协议。开发者可以阅读项目的许可证文件获得更多信息。