【问题标题】:Unification of python command line interpreter and command-subcommand command line interfacespython命令行解释器和command-subcommand命令行接口的统一
【发布时间】:2010-09-13 19:43:24
【问题描述】:

我有一个命令行解释器(或 python docs 中的“面向行的命令解释器”,用于 cmd 模块),用于我想添加命令行实用程序接口的程序。
例如,现在会话如下所示:(% 用于 shell 提示,:) 是我的自定义提示)
% tasks(调用命令行解释器)
:) clockHours Teaching_Sara_to_coregister_T1_to_T2
@ 987654327@

另外我要这个接口:
% tasks clockHours Teaching_Sara_to_coregister_T1_to_T2

我设想自定义解释器命令映射到命令行实用程序中的子命令。是否有一个图书馆可以一起做这些?不必编写两次完成代码、两次命令结构代码等会很棒。如果没有,如果我尝试实现此行为,对我有什么建议,或者考虑一下它可能有多大用处?

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

【问题讨论】:

    标签: python command-line interface tab-completion


    【解决方案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>
    

    【讨论】:

    • 好看-谢谢。存在自动完成的问题,但我猜这是一个外壳问题 - 理想情况下,我编写包装器以便我可以指定一次自动完成行为,并且它在两种情况下都可以使用,但它的自动完成机制可能太不同以至于没有意义.
    【解决方案2】:

    您可能会发现另一个有用的东西是cmdln 模块。

    【讨论】:

    • 嗯,我会研究一下——我以前用过 cmd2,但从来没有用过 cmdln。
    • 我被文档弄糊涂了——这到底是做类似 cmd.py 的事情(比如 ftp),还是只是命令行的事情(比如 git、hg)?
    • 该工具的主要目的是创建命令行的东西,如 git、hg。我没有调查与cmd 模块的兼容性以提供具有相同界面的交互功能,但在那里获得这种支持似乎很自然。
    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    相关资源
    最近更新 更多