readline 帮助功能及自动完成

0 投票
2 回答
1219 浏览
提问于 2025-04-17 04:57

我想做一个和JUNOS命令行界面或者思科命令行界面一样的项目。

我发现了gnu readline这个工具,但里面的函数和方法太多了,让我有点困惑。不过,我想要一个可以用Tab键和空格键自动补全的命令行界面,还希望能用问号显示命令的帮助信息。

我有两个问题:

  1. 我找到了用Python和Perl写的代码,但我对Python不太熟悉,虽然那段代码是完整的,我只是想知道我是否应该继续用Python。其实我更擅长Perl,但到目前为止我找到的Perl代码都不完整。
  2. readline.parse_and_bind('tab: complete')

我应该把同一个补全功能用在帮助和自动补全这两个功能上吗?我还看过另一个函数。

readline.set_completion_display_matches_hook(print_suggestions)

你有什么建议吗?我对这个完全是新手!

2 个回答

1

我们需要创建一个类似于JunOS、Cisco或VyOS的命令行界面(cli),于是我们在ishell的基础上进行了开发,ishell使用readline来完成这个工作。

在项目页面上有这样的介绍:

ishell可以帮助你轻松创建一个交互式的命令行界面。它支持命令补全、动态参数、命令历史记录和命令链式执行。

你可以在GitHub上查看这个项目:https://github.com/italorossi/ishell

Cisco的示例: 在这里输入图片描述

附注:我是这个项目的作者 :).

1

我得说,我有点搞不清楚你问题中具体想问的是什么。不过,我还是给你一个建议:

可以先从cmd模块开始。这个模块给你提供了一个很好的框架,可以用来构建命令行解释器。它自带了自动补全功能(前提是你有安装readline)。你可以先实现你的命令行界面。一旦这个部分稳定下来,你再考虑添加一些更方便的功能,比如命令参数的自动补全、帮助键等等。这样,你就有了一个可以使用的应用,等到真正需要的时候再去详细了解readline的细节。如果我是你,我不会一开始就去研究整个readline的API。

撰写回答