[英]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.