class SonicBashCli(Operation): """ Run a sonic-style command line. Example: show interfaces status --> SonicBashCli(["show", "interfaces", "status"]) """ skip_when_non_interactive = False def __init__(self, sys_argv): self._argv = sys_argv import show.main as show # noqa import config.main as config # noqa if self._argv[0] == 'show': self._func = StdioWrapper(show.cli) elif self._argv[0] == 'config': self._func = StdioWrapper(config.config) else: raise ValueError("Unrecognised cli entrypoint %s" % self._argv[0]) def __call__(self, data): self._argv, sys.argv = sys.argv, self._argv try: result = self._func(data) finally: self._argv, sys.argv = sys.argv, self._argv return result 解释这段代码
时间: 2024-02-14 19:31:53 浏览: 155
这段代码定义了一个名为SonicBashCli的类,它是Operation类的子类。它用于运行一个类似Sonic风格的命令行。
首先,这个类有一个属性skip_when_non_interactive设置为False,表示当非交互式时不跳过。
在构造函数__init__中,它接受一个参数sys_argv,这个参数是命令行参数列表。然后根据sys_argv的第一个元素来判断执行哪个命令。
如果sys_argv的第一个元素是'show',则将show.main模块的cli函数包装在StdioWrapper中,并将结果赋值给self._func。
如果sys_argv的第一个元素是'config',则将config.main模块的config函数包装在StdioWrapper中,并将结果赋值给self._func。
如果sys_argv的第一个元素既不是'show'也不是'config',则抛出一个ValueError异常,提示无法识别的命令行入口。
在__call__方法中,它接受一个参数data,然后将self._argv和sys.argv交换,并将self._argv设置为传入的sys_argv。接着尝试执行self._func(data)来处理命令行操作。最后,将self._argv和sys.argv再次交换回原来的值,并返回结果result。
相关问题
error: src refspec 202111-lts does not match any. error: failed to push some refs to 'ssh://git@git.teraspek.cn:7999/sonic/sonic-swss.git'
这个错误通常表示你尝试推送一个不存在的分支或者推送的分支名称不正确。要解决这个问题,你可以按照以下步骤进行操作:
1. 确保你本地的分支名称与远程仓库中的分支名称一致。可以使用以下命令查看本地分支:`git branch`。
2. 如果你要推送的分支不存在于远程仓库中,你需要先创建一个同名的分支。可以使用以下命令创建一个新的分支:`git checkout -b <branch_name>`。
3. 如果你已经创建了一个新的分支,确保你切换到了正确的分支。可以使用以下命令切换到指定分支:`git checkout <branch_name>`。
4. 确保你已经将所有的修改和提交都添加到本地分支中。可以使用以下命令查看修改的文件:`git status`,并使用 `git add` 和 `git commit` 命令添加和提交修改。
5. 最后,使用正确的推送命令将分支推送到远程仓库。可以使用以下命令进行推送:`git push origin <branch_name>`。
如果问题仍然存在,请提供更多的详细信息,例如你之前执行了哪些操作,以及完整的错误信息,以便我能够更好地帮助你解决问题。
make: *** [Makefile:7:target/sonic-innovium.bin] 错误 2
这个错误提示是在进行Makefile编译时出现的,一般是因为编译过程中出现了错误,导致编译失败。可能的原因包括代码错误、依赖库缺失、编译器版本不兼容等。要解决这个问题,需要具体分析错误提示和编译日志,找出具体的错误原因并进行修复。建议检查一下你的Makefile文件和代码是否有问题,同时检查一下编译所需的依赖库是否安装完整。
阅读全文