title: directory path types with argparse
body: <p>My python script needs to read files from a directory passed on the command line. I have defined a readable_dir type as below to be used with argparse for validating that the  directory passed on the command line is existent and readable.
  Additionally, a default value (/tmp/non_existent_dir in the example below) has also been specified for the directory argument.
  The problem here is that argparse invokes readable_dir() on the default value even in a situation where a directory argument is explicitly passed in on the command line. This causes the script to crap out as the default path /tmp/non_existent_dir does not exist in a context where a directory is explicitly passed in on the command line.
  I could get around this by not specifying a default value and making this argument mandatory, or by deferring the validation until later in the script but is a more elegant solution that anyone is aware of?</p>
  
  <pre><code>#!/usr/bin/python
  import argparse
  import os
  
  def readable_dir(prospective_dir):
    if not os.path.isdir(prospective_dir):
      raise Exception("readable_dir:{0} is not a valid path".format(prospective_dir))
    if os.access(prospective_dir, os.R_OK):
      return prospective_dir
    else:
      raise Exception("readable_dir:{0} is not a readable dir".format(prospective_dir))
  
  parser = argparse.ArgumentParser(description='test', fromfile_prefix_chars="@")
  parser.add_argument('-l', '--launch_directory', type=readable_dir, default='/tmp/non_existent_dir')
  args = parser.parse_args()
  </code></pre>