Skip to main content

Custom actions for argparse package

Project description

This module implements some reusable custom actions to use with the argparse module.


The following example, taken from samples/ demonstrates the use of a custom action to verify the existence of a folder, specified from the command line:

import argparse
import argparse_actions

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Custom Actions')

        args = parser.parse_args()
        print 'Directory exists: {0}'.format(
    except argparse_actions.NonFolderError as e:
        print 'Directory does not exist'
        print e

In the next example from samples/, we use the ProperIpFormatAction custom action to verify if an IP address from command line is properly formatted:

import argparse
import argparse_actions

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Custom Actions')

        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

Extending the Custom Actions

If you find a custom action that almost do what you want, you can

  1. Write your own from scratch
  2. Submit an enhancement request
  3. Extend the existing custom action

I am not commenting on option 1–it is your choice. For option 2, I will be gladly to accept any reasonable request, but sometimes life happens and I might not response quickly enough. That leaves you with the third option of extending the custom action yourself. Don’t worry, it is not that hard. In the next example, I will take the ProperIpFormatAction custom action and extend it to include ‘localhost’ as one of the proper IP format:

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)
            # 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)

        args = parser.parse_args()
        print 'IP is valid: {0}'.format(args.ip)
    except argparse_actions.InvalidIp as e:
        print e


  • The first step is to create a new class (IpAndLocalhostAction), based on an existing custom action (argparse_actions.ProperIpFormatAction, which is really a class itself)
  • Define the function __call__ to override the base custom action with your own logic.

More Ideas

Here are a few ideas I have in mind, which I might implement:

  • Extend ProperIpFormatAction to determine if and IP…
    • Is reachable
    • Provides some services such as HTTP or FTP
    • Belongs to a particular list, such as the banned IP list
  • Extend FolderExistsAction to determine if the folder is…
    • Writable
    • Empty
    • A symbolic link

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for argparse_actions, version 0.4.4
Filename, size File type Python version Upload date Hashes
Filename, size argparse_actions-0.4.4.tar.gz (5.5 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page