1

我正在使用 Python(版本 1.0.2)中的 Cmd2 模块来构建命令行界面(CLI)。

在我运行程序之后(这样我就在我的自定义 CLI 中),如果我想启用调试以便它显示错误的堆栈跟踪,我必须从 CLI 手动运行“set debug true”。

我想要的是一种在每次调用 CLI 时自动将“调试”标志设置为 true 的方法。我知道我可以将包含设置调试作为第一步的脚本传递给 CLI,但我希望交互式会话也具有这种行为。

有什么方法可以更改 Cmd2 中调试的默认值吗?

4

1 回答 1

1

关于设置的cmd2文档说(强调我的):

设置

设置为用户提供了一种机制来控制cmd2基于应用程序的行为。设置存储在您的子类的实例属性中,cmd2.Cmd并且还必须出现在cmd2.Cmd.settable字典中。开发人员可以为这些设置设置默认值,用户可以在运行时使用 set 命令修改它们。

因此,要默认启用该debug设置,您只需将对象的debug属性设置为. 例如,如果这是应用程序:cmd2.CmdTrue

import cmd2

class App(cmd2.Cmd):
    @cmd2.with_argument_list()
    def do_spam(self, args):
        raise Exception("a sample exception")

你只需要做

app = App()
app.debug = True

现在,如果我从命令行运行应用程序,debug将默认启用。


完整的 Python 代码:

import cmd2


class App(cmd2.Cmd):
    @cmd2.with_argument_list()
    def do_spam(self, args):
        raise Exception("a sample exception")


if __name__ == '__main__':
    import sys

    app = App()
    app.debug = True
    sys.exit(app.cmdloop())

输入:

spam

输出:

Traceback (most recent call last):
  File "[...]\venv\lib\site-packages\cmd2\cmd2.py", line 1646, in onecmd_plus_hooks
    stop = self.onecmd(statement, add_to_history=add_to_history)
  File "[...]\venv\lib\site-packages\cmd2\cmd2.py", line 2075, in onecmd
    stop = func(statement)
  File "[...]\venv\lib\site-packages\cmd2\decorators.py", line 69, in cmd_wrapper
    return func(cmd2_app, parsed_arglist, **kwargs)
  File "[...]/main.py", line 7, in do_spam
    raise Exception("a sample exception")
Exception: a sample exception
EXCEPTION of type 'Exception' occurred with message: 'a sample exception'
于 2020-07-06T09:57:41.180 回答