Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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中使用cmd模块以及argparse或optparse_Python_Cmd_Argparse_Optparse - Fatal编程技术网

在python中使用cmd模块以及argparse或optparse

在python中使用cmd模块以及argparse或optparse,python,cmd,argparse,optparse,Python,Cmd,Argparse,Optparse,我试图用python编写一个交互式shell,用于管理不同类型的硬件,以配置和发出一些命令集 它将如何工作: import cmd, shlex import argparse class ChooseHardware(cmd.Cmd): """Simple command processor example.""" hardware = [ 'netapp', 'isilon', 'ibm' ] def do_netapp(self, argv):

我试图用python编写一个交互式shell,用于管理不同类型的硬件,以配置和发出一些命令集

它将如何工作:

import cmd, shlex
import argparse

class ChooseHardware(cmd.Cmd):

    """Simple command processor example."""
    hardware = [ 'netapp', 'isilon', 'ibm' ]

    def do_netapp(self, argv):
        parser = argparse.ArgumentParser(description='Process netapp argument.')
        parser.add_argument('--qtree', dest='qtree',
                            help='qtree name')
        args = parser.parse_args(argv.split())
        print args

    def do_isilon(self, argv):
        pass

    def do_ibm(self, argv):
        pass

    def do_EOF(self, line):
        return True

    def do_exit(self, s):
        return True

    def do_help(self, h):
        print 'Unknown: hardware type'

    def help_exit(self):
        print "Exit the interpreter."
        print "You can also use the Ctrl-D shortcut."

if __name__ == '__main__':
    obj = ChooseHardware()
    obj.prompt = 'cmd_prompt:'
    obj.cmdloop()
因此,一旦进入交互式shell提示符,我需要键入一个硬件名称,比如说HardwareA,然后我的shell提示符将变为HardwareA。一旦我得到一个特定的硬件提示,在那之后,我输入的任何cmd(s)或option(s)都将解析并调用来自HardwareA模块的特定函数或方法

为了使这项工作正常进行,我尝试使用argparseoptparse以及cmd模块了解一些想法

但到目前为止,我还不能得到一个清晰的图片或任何好的文件开始

所以,如果有人有某种解决方案或好的链接,请让我知道,并给我一些启示

这是我的片段:

import cmd, shlex
import argparse

class ChooseHardware(cmd.Cmd):

    """Simple command processor example."""
    hardware = [ 'netapp', 'isilon', 'ibm' ]

    def do_netapp(self, argv):
        parser = argparse.ArgumentParser(description='Process netapp argument.')
        parser.add_argument('--qtree', dest='qtree',
                            help='qtree name')
        args = parser.parse_args(argv.split())
        print args

    def do_isilon(self, argv):
        pass

    def do_ibm(self, argv):
        pass

    def do_EOF(self, line):
        return True

    def do_exit(self, s):
        return True

    def do_help(self, h):
        print 'Unknown: hardware type'

    def help_exit(self):
        print "Exit the interpreter."
        print "You can also use the Ctrl-D shortcut."

if __name__ == '__main__':
    obj = ChooseHardware()
    obj.prompt = 'cmd_prompt:'
    obj.cmdloop()
输出:

yopy:/test$ python choose_hw.py
cmd_prompt:
cmd_prompt:netapp
Namespace(qtree=None)
cmd_prompt:netapp --qtree /opt/var
Namespace(qtree='/opt/var')
cmd_prompt:

提前感谢。

请仔细阅读。要求我们推荐或查找工具、库或喜爱的非站点资源的问题对于堆栈溢出来说是离题的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决问题所做的工作。请查看
plac
。这是一个基于
argparse
@hpaulj构建的模块非常感谢,我会读到的。