Tipos de ruta de directorio con argparse

Mi script de Python necesita leer archivos de un directorio que se pasa en la línea de comandos. He definido un tipo de direccionamiento de lectura como se muestra a continuación para ser usado con argparse para validar que el directorio aprobado en la línea de comando es existente y legible. Además, también se ha especificado un valor predeterminado (/ tmp / non_existent_dir en el ejemplo a continuación) para el argumento de directorio. El problema aquí es que argparse invoca readable_dir () en el valor predeterminado incluso en una situación en la que un argumento de directorio se pasa explícitamente en la línea de comandos. Esto hace que la secuencia de comandos se elimine porque la ruta / tmp / non_existent_dir predeterminada no existe en un contexto donde un directorio se pasa explícitamente en la línea de comandos. Podría evitar esto al no especificar un valor predeterminado y hacer que este argumento sea obligatorio, o al diferir la validación hasta más adelante en el script, pero ¿es una solución más elegante de la que alguien tenga conocimiento?

#!/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()

Respuestas a la pregunta(3)

Su respuesta a la pregunta