簡體   English   中英

如何在Python中將'args'放入argparse.Argument

[英]How to put 'args' into argparse.Argument in python

例如,如果我輸入“ python prog.py create filename”,則結果應該是創建一個名為“ filename”的文件。 但是我不知道如何將“ args”放入create的定義中。 有人可以給我一些建議嗎? 這是代碼:

    import argparse
    import sys

    class ExecuteShell(object):

        def create(self, args):

        """create a file"""
        print 'xxxxxxxxxxx', args 

            #return args 

        def list(self, args):

        """ccccccc"""
        print args

            #return args

        def delete(self, args):

        """ddddddd"""
        print 'ddddddd'

            #return args

    class TestShell(object):

       def _find_actions(self, subparsers, actions_module, args):

            for attr in (action for action in dir(actions_module) if not action.startswith('__')):

            callback = getattr(actions_module, attr)

            desc = callback.__doc__ or ''

                subparser = subparsers.add_parser(attr, description=desc, add_help=False)

                subparser.add_argument('-h', '--help', action='help',
                                       help=argparse.SUPPRESS)    
                .......

       def main(self, args):

            parser = argparse.ArgumentParser()

            subparsers = parser.add_subparsers()

            a = ExecuteShell()

            subcommand_parser = self._find_actions(subparsers, a, args)

            (options, args) = parser.parse_known_args(args)

    if __name__ == "__main__":

        a = TestShell()
        a.main(sys.argv[1:])

非常感謝!

在您概述的框架中,我可能像以下程序一樣實現它。 關鍵項目是:

  • parser.add_subparsers采用dest參數。 這樣就可以知道調用了哪個子解析器。
  • 將一個項目添加到收集文件名的子subparser.add_argument('files',...)下面的subparser.add_argument('files',...)
  • 實際調用命令子例程( getattr(a,options.command) ...行)

import argparse
import sys

class ExecuteShell(object):
    # This function demonstrates that you can put 
    # methods in ExecuteShell(), if you need to, 
    # without having them appear as command-line commands
    # simply by prepending an underscore.
    def _useful(self):
        """Useful method that ISNT a command."""
        return 3.14159

    def create(self, args):
        """create a file"""
        print 'xxxxxxxxxxx', args 

    def list(self, args):
        """ccccccc"""
        print args

    def delete(self, args):
        """ddddddd"""
        print 'ddddddd'

class TestShell(object):

   def find_actions(self, subparsers, actions_module, args):
        for attr in (action for action in dir(actions_module) if not action.startswith('_')):
            callback = getattr(actions_module, attr)
            desc = callback.__doc__ or ''
            subparser = subparsers.add_parser(attr, description=desc, help=desc)

            # This add_argument describes the positional argument, like so:
            #   'files' -- the result of matching this argument will be
            #              stored in `options.files`
            #   metavar='FILE' -- The help messages will use the word "FILE"
            #                     when describing this argument
            #   nargs='+' -- `narg` describes how many arguments this should
            #                match. The value `+` means "all of them, but at
            #                least one." 
            subparser.add_argument('files', metavar='FILE', nargs='+')

   def main(self, args):
        # setup parser
        parser = argparse.ArgumentParser()
        subparsers = parser.add_subparsers(dest='command')
        a = ExecuteShell()
        subcommand_parser = self.find_actions(subparsers, a, args)

        # Run parser
        args = parser.parse_args(args)

        # Run selected command
        # If we reach this statement, then:
        #    args.command is the command the user chose, 
        #       for example, 'create' or 'list'
        #    args.files is the list of arguments that followed 'create' or 'list'
        #    a is an instance of ExecuteShell
        #    getattr(a, args.command) is the attribute or method of `a`
        #       the name in `args.command`, for example, a.create or a.list
        #    getattr(a, args.command)(args.files) invokes that method,
        #       passing in the list of user arguments
        #    So, this line in effect might call `a.create(['file1', 'file2'])`
        getattr(a, args.command)(args.files)

if __name__ == "__main__":

    a = TestShell()
    a.main(sys.argv[1:])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM