如何在Python中制作命令行界面或解释器
我已经开发了 class1.py、class2.py 等文件,每个类里面都有一些功能,比如 Operator.py 里面有加法、减法、乘法和除法的功能。我想知道如何为这些类建立一个命令行界面(CLI)。
另外,这个命令行界面是不是需要在 main()
里面用一个无限循环来进行交互?
还有,命令行界面怎么能给出一些反馈,比如建议用户进行下一个操作,或者输入正确的命令,或者输入 --help
来查看所有可用的命令,就像 Bash 终端那样?
我注意到 Python 有一个 optparse
模块。有没有一些好的、完整的或者高质量的示例,展示如何构建一个命令行界面?我想借此机会学习如何编写一个命令行程序。
我已经开发了几个类,还有一个图形用户界面(GUI)来调用这些类的方法。现在我想要一个命令行界面,像 GUI 一样使用这些类。比如,我有一些类,比如 CDContainer(里面有 addCD、removeCD 等方法),CD(里面有 play、stop、pause 等方法),而且我有一个可以交互的 GUI。现在我想要一个命令行界面,在 Bash 里我可以运行这个命令行界面并调用 createCDContainer、addCD、removeCD 等命令。
如果我使用 cmd
,
class CDContainerCLI(cmd.Cmd):
def do_CDContainer(self, line):
print "create CD container"
def do_addcd(self, line):
print "add cd into the container"
我该如何在这里添加一些选项?比如,我想要 addcd --track 3 --cdname thriller
。
我认为 --track 3 --cdname thriller
是 addcd
函数的四个参数。那该怎么实现呢?
4 个回答
我不太确定你具体想要什么:看起来你想要创建一个互动式的命令行界面,但你提到的 optparse
是用来简化创建可以从系统命令行运行的模块接口,而不是提供一个命令行界面本身。
你似乎确实想让你的模块实现自己的互动式命令行,但也许你还希望能通过命令行访问一些命令,比如直接在 bash
中输入 your_script the_command --argument value --other-argument
来调用。这正是 optparse
的用途,但它已经被淘汰,推荐使用 argparse
。argparse
是 Python 2.7 标准库的一部分,可以通过常规方式安装(比如作为你模块的依赖,或者通过 PyPI 单独安装等)来支持旧版本的 Python。
argparse
让你可以相对简单地将特定的选项或子命令链接到你代码中的入口点(也就是函数调用)。它的文档非常详细,如果你打算创建几个这样的接口,值得好好阅读一下。对于高级用法,你可以通过创建一个 自定义动作 来做一些有趣的事情,让你的代码更易于管理。
从 cmd.Cmd
这个类开始创建自己的类,并根据需要重写里面的不同方法。