统一python命令行解释器和命令子命令命令行接口
我有一个命令行解释器(或用于统一python命令行解释器和命令子命令命令行接口,python,command-line,interface,tab-completion,Python,Command Line,Interface,Tab Completion,我有一个命令行解释器(或用于cmd模块的“面向行的命令解释器”),用于一个我想添加命令行实用程序接口的程序。例如,现在一个会话如下所示:(%对于shell提示符,:)是我的自定义提示符) %tasks(调用命令行解释器) :)时钟小时教Sara\u到coregister\u T1\u到T2 :)退出 另外,我想要这个界面: %tasks将Sara\u教给coregister\u T1\u教给T2时数 我设想将自定义解释器命令映射到命令行实用程序中的子命令。有没有一个图书馆可以一起做这些?如果不需
cmd
模块的“面向行的命令解释器”),用于一个我想添加命令行实用程序接口的程序。例如,现在一个会话如下所示:(
%
对于shell提示符,:)
是我的自定义提示符)%tasks
(调用命令行解释器):)时钟小时教Sara\u到coregister\u T1\u到T2
:)退出
另外,我想要这个界面:
%tasks将Sara\u教给coregister\u T1\u教给T2时数
我设想将自定义解释器命令映射到命令行实用程序中的子命令。有没有一个图书馆可以一起做这些?如果不需要编写两次完成代码、两次命令结构代码等,那就太好了。如果不需要,如果我尝试实现这种行为,有没有什么建议,或者考虑一下它有多有用
显然,我失去了简单临时变量的优势,这就是为什么我开始使用解释器方法,但我的许多自定义解释器命令不依赖于此行为,或者可以很容易地修改为不需要它-我希望命令行实用程序子命令用于该子集。
cmd
如果我正确理解您的问题,模块可能足以满足您的需要
您的最终解决方案可能接近以下示例:
import cmd
import sys
class MyCmd(cmd.Cmd):
def do_hello(self, line):
print "hello"
def do_exit(self, line):
return True
if __name__ == '__main__':
my_cmd = MyCmd()
if len(sys.argv) > 1:
my_cmd.onecmd(' '.join(sys.argv[1:]))
else:
my_cmd.cmdloop()
给予这种行为:
C:\_work\home>jython cmdsample.py hello
hello
C:\_work\home>jython cmdsample.py
(Cmd) hello
hello
(Cmd) exit
C:\_work\home>
另一件您可能会发现有用的东西是模块。外观不错-谢谢。有自动完成的问题,但我猜这是一个shell问题-理想情况下,我编写包装器,这样我就可以指定自动完成行为一次,并且在这两种情况下都可以使用它,但它的自动完成机制可能太不一样了,所以没有意义。嗯,我会研究它-我以前使用过cmd2,但是永远不要使用cmdln。我被文档搞糊涂了-这是像cmd.py一样的东西(比如ftp),还是仅仅是命令行的东西(比如git,hg)?这个工具的主要目的是创建命令行的东西,比如git,hg。我没有研究与
cmd
模块的兼容性,以提供具有相同界面的交互功能,但在那里获得这种支持似乎是很自然的。