Python 用于 REPL 和 CLI 参数解析的库?

Python library for REPL and CLI argument parsing?

我希望在 Python 中创建一个 CLI 应用程序,可以 运行 直接从命令行:

$ myapp command --flag --argument foo

或者可以 运行 作为 REPL 应用程序:

$ myapp
(context)> command --flag --argument foo
(context)> other --with different --flags

我看了一下Click (including ) and argparse, which seem to be good for the former but have limited support for the latter, and cmd2,后者好像不错,但对前者支持有限

对于在这种情况下使用什么有什么建议吗?我考虑过简单地使用两个不同的库和它们自己的包装器来实现相同的核心“业务逻辑”,但我更愿意使用为此目的构建的东西,如果存在的话。

我在同一条船上。 Python Prompt Toolkit 看起来非常适合创建 REPL 类型的应用程序。事实上,作者已经使用它创建了一个“更好的 Python REPL”以及全屏应用程序,例如 VIM clone in pure python。我刚开始使用它,但它看起来不错。

有趣的是,有一个关于命令行 arg 解析的 bug 文件,作者回应说像 click 或 argparse 这样的东西可以做到这一点。所以我认为你可以结合这两个库来实现你正在寻找的东西。

最后,从 REPL 接受字符串并将其解析为 args 的问题类似于 Stack Overflow 上的 ,答案可能会有所帮助。

Nessaid cli,是一个主要用于 REPL 应用程序的 CLI 构建工具,尽管任何有效的 repl 表达式都可以从命令行输入到程序中。它具有以下特点。

语法驱动的 CLI 定义 支持主 cli 中的多个上下文子 clis 支持强制、可选和替代参数。 支持一组任意顺序的参数和表达式 支持自定义令牌定义 repl 模式下的自动完成和建议。 支持带空格的参数和带引号的特殊字符。

项目页面:https://github.com/saithalavi/nessaid_cli

基本 CLI 实现:https://github.com/saithalavi/nessaid_cli/blob/master/doc/simple-cli/simple_cli.py

一个基本的路由器 CLI 示例:https://github.com/saithalavi/nessaid_cli/tree/master/doc/router-box-cli

文档主要针对repl环境。但是任何在交互模式下可接受的命令序列都可以从命令行执行,方法是将参数提供给 class 方法 execute_args 或将整行提供给 subclass 的 execute_line NessaidCmd.

就是这样,

from nessaid_cli.cmd import NessaidCmd

class MyCli(NessaidCmd):

    def do_command1(self):
        """Cli grammar and code for this command"""
        pass

    aync def do_command2(self, arg1, arg2):
        """Cli grammar and code for this command"""
        pass

import sys
import asyncio
if __name__ == '__main__':
    asyncio.get_event_loop().run_until_complete(
        MyCli.execute_args(sys.argv[1:]))

对于REPL模式,可以初始化class,调用运行()方法

喜欢

MyCli(prompt="# ").run()