python命令行解释器和command-subcommand命令行接口的统一

时间:2010-09-13 19:43:25

标签: python command-line interface tab-completion

对于我想要添加命令行实用程序接口的程序,我有一个命令行解释器(或cmd模块的python docs中的“面向行的命令解释器”)。

例如,现在会话如下所示:( %表示shell提示,:)是我的自定义提示)
% tasks(调用命令行解释器)
:) clockHours Teaching_Sara_to_coregister_T1_to_T2
:) exit

另外,我想要这个界面:
% tasks clockHours Teaching_Sara_to_coregister_T1_to_T2

我设想在命令行实用程序中映射到子命令的自定义解释器命令。是否存在共同完成这些工作的库?如果不必两次编写完成代码,两次命令结构代码等等,那将是很好的。如果不是,如果我尝试实现这种行为,或者对它有多大用处的想法,我会给你什么建议?

显然我失去了简单临时变量的优势,这就是我开始使用解释器方法的原因,但是我的许多自定义解释器命令不依赖于这种行为,或者可以很容易地修改而不需要它 - 它是我想要命令行实用程序子命令的子集。

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,

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>

答案 1 :(得分:1)

您可能会觉得有用的另一件事是cmdln模块。