argparse包的自定义操作
argparse_actions的Python项目详细描述
此模块实现一些可重用的自定义操作,以便与argparse模块一起使用。
示例
下面的示例,从^ {EM1}$Simult/FoLDRYActh.PysEEM >演示了使用自定义操作来验证从命令行指定的文件夹的存在:
import argparse import argparse_actions if __name__ == '__main__': parser = argparse.ArgumentParser(description='Custom Actions') parser.add_argument('directory', action=argparse_actions.FolderExistsAction) try: args = parser.parse_args() print 'Directory exists: {0}'.format(args.directory) except argparse_actions.NonFolderError as e: print 'Directory does not exist' print e
在samples/proper_ip.py的下一个示例中,我们使用properipformataction自定义操作来验证来自命令行的IP地址是否正确格式化:
import argparse import argparse_actions if __name__ == '__main__': parser = argparse.ArgumentParser(description='Custom Actions') parser.add_argument('ip', action=argparse_actions.ProperIpFormatAction) try: args = parser.parse_args() print 'IP is properly formatted: {0}'.format(args.ip) except argparse_actions.InvalidIp as e: print 'IP is invalid: {0}'.format(e.ip) # This will display similar output: # print e
扩展自定义操作
如果您发现一个自定义操作几乎可以满足您的要求,则可以
- 自己从头开始写
- 提交增强请求
- 扩展现有自定义动作
我不是在评论选项1——这是你的选择。对于选择2,我很乐意接受任何合理的要求,但有时生活会发生,我可能没有足够快的反应。这就给了您第三种选择,即自己扩展自定义操作。别担心,没那么难。在下一个示例中,我将采用properipformataction自定义操作,并将其扩展为包含“localhost”作为正确的IP格式:
import argparse import argparse_actions class IpAndLocalhostAction(argparse_actions.ProperIpFormatAction): def __call__(self, parser, namespace, values, option_string=None): # Do our check: allow for 'localhost' if values == 'localhost': setattr(namespace, self.dest, values) else: # Super class to perform its check parent = super(IpAndLocalhostAction, self) parent.__call__(parser, namespace, values, option_string) if __name__ == '__main__': parser = argparse.ArgumentParser(description='Custom Actions') parser.add_argument('ip', action=IpAndLocalhostAction) try: args = parser.parse_args() print 'IP is valid: {0}'.format(args.ip) except argparse_actions.InvalidIp as e: print e
讨论:
- 定义函数\u call\uu以使用自己的逻辑覆盖基本自定义操作。
更多想法
以下是我的一些想法,我可能会实施:
- 扩展{em1}$properiformataction以确定是否和IP…
- 可到达
- 提供一些服务,如http或ftp
- 属于特定列表,例如禁用的IP列表
- < d>扩展^ {EM1}$$FLDReWorksActudie
- 可写
- 空
- 符号链接
以确定文件夹是否是…