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. 提交增强请求
  3. 扩展现有自定义动作

我不是在评论选项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

讨论:

    第一步是创建一个新类(^ {EM1}$IPANDROCALHOSTActudio),基于现有的自定义操作(^ {EM1}$AgPARSESEActhOn.RealIppFrastActudie,这实际上是一个类本身)
  • 定义函数\u call\uu以使用自己的逻辑覆盖基本自定义操作。

更多想法

以下是我的一些想法,我可能会实施:

  • 扩展{em1}$properiformataction以确定是否和IP…
    • 可到达
    • 提供一些服务,如http或ftp
    • 属于特定列表,例如禁用的IP列表
  • < d>扩展^ {EM1}$$FLDReWorksActudie以确定文件夹是否是…
    • 可写
    • 符号链接

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
正则表达式使用Java从服务器截断文本   micronaut微服务的java内存消耗   如果私有函数需要相同的输入,java应该在公共函数中显式执行异常检查   为什么我们在java中使用抽象类和抽象方法   Java中接受外来字母的字符串?   cordova Android:ClassNotFoundException,包括ZXing   通过LiveData observer向特定索引添加项时出现java IndexOutOfBoundsException   jsp Java从两个源调用一个servlet   java如何设置网格布局中按钮的位置?   java HashMap返回方法   java JDK错误版本   java如何将现有类集成到新的Swing项目中   java如何在扫描程序位于输入端时使for循环停止   java正则表达式匹配空白表   java组织。格拉德尔。工具。BuildException:设置的代码长度无效   JList中的swing Java格式化字符串   javabeans如何将JavaBean属性映射到另一个名称以进行输出?   ajax请求后的java Rerender RichFaces错误消息