Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
统一python命令行解释器和命令子命令命令行接口_Python_Command Line_Interface_Tab Completion - Fatal编程技术网

统一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
模块的兼容性,以提供具有相同界面的交互功能,但在那里获得这种支持似乎是很自然的。