人。我在这里看到了一些CLI问题,但我仍然想问这个问题以获得更详细的答案。
我已经开发了class1.py,class2.py等,每个类中都实现了函数。例如Operator.py具有add,minus,time,devide函数。如何为这些类构建命令行界面?
对于这个CLI,它是main()内的一个无限循环用于交互吗?
CLI如何提供一些反馈,例如,建议用户进行下一步操作或输入正确的命令或键入--help并检查所有可用命令。像Bash shell一样。
似乎也有来自python的optparse模块。是否有一些好的,完整的或高质量的样本显示了如何构建CLI?我想借此机会学习如何编写CLI程序。
我想要的是:我已经开发了几个类,还有一个GUI来调用这些类中的方法。现在我希望有一个CLI,比如GUI,可以使用这些类。例如我有像CDContainer这样的类(使用addCD,removeCD等方法),CD(使用播放,停止,暂停等方法),我有一个可以进行交互的GUI。现在我想要一个CLI,在bash下,我可以运行这个CLI并调用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惊悚片 我认为“--track 3 --cdname thriller”是addcd函数的4个参数。如何实现?
答案 0 :(得分:5)
从cmd.Cmd
派生,根据需要覆盖各种方法。
答案 1 :(得分:2)
答案 2 :(得分:1)
使用cmd模块:
其他套餐
您还可以使用在cmd模块
之上构建的pypi上托管的各种模块答案 3 :(得分:1)
我不确定你在寻找什么:似乎你想构建一个交互式shell,但你也提到了optparse
,它旨在简化可以运行的模块接口的创建来自系统shell ,而不是自己提供shell。
看起来您确实希望您的模块实现自己的交互式shell,但也许您还希望从命令行访问某些命令,例如:从your_script the_command --argument value --other-argument
致电bash
或者你有什么。这是optparse
旨在提供的内容,但已弃用argparse
。 argparse
位于Python 2.7标准库中,可以以标准方式安装(例如,作为模块的依赖项,或通过PyPI等单独安装),用于较旧的Pythons。
argparse
使得将特定选项或子命令链接到代码中的入口点(即函数调用)变得相对简单。文档非常详细,如果您可能想要制作一些这样的接口,则值得彻底阅读。对于高级用法,您可以通过创建custom action来做一些有趣的事情,并使代码更易于管理。
答案 4 :(得分:0)
我认为他所询问的是如何在交互式shell中轻松处理 中的可选参数,因此当您使用该程序时,它看起来像这样:
$ myprogram
(Cmd) addcd --track 3 --cdname thriller
因此运行myprogram会打开自己的命令提示符,可以发出addcd等命令以及可选参数,然后进行处理。
我认为,最好的方法是使用argparse
和cmd
。 sys.argv
方法可以传递一个字符串列表,而不是解析parse_args
。如下所示:
def do_addcd(self, line):
parser = argparse.ArgumentParser(prog='addcd')
parser.add_argument('--track', type=int)
parser.add_argument('--cdname')
args = parser.parse_args(line.split())
newcd = CD(args.track, args.cdname)
做这样的事情的问题,正如我通过试图完成这类事情而发现的那样,parse_args
如果你提供错误的参数数量,它往往会退出整个程序,以及其他错误。此用例中的所需行为是简单地退回到自定义交互式shell,但如果没有一些hacky变通方法或子类化ArgumentParser
并覆盖parse_args
,这将不容易做到。