python3 - argparse python ejemplo
Especificar el formato para los argumentos de entrada argparse python (2)
Tengo una secuencia de comandos python que requiere algunas entradas de línea de comandos y estoy usando argparse para analizarlas. Encontré la documentación un poco confusa y no pude encontrar una forma de verificar el formato en los parámetros de entrada. Lo que quiero decir al verificar el formato se explica con este script de ejemplo:
parser.add_argument(''-s'', "--startdate", help="The Start Date - format YYYY-MM-DD ", required=True)
parser.add_argument(''-e'', "--enddate", help="The End Date format YYYY-MM-DD (Inclusive)", required=True)
parser.add_argument(''-a'', "--accountid", type=int, help=''Account ID for the account for which data is required (Default: 570)'')
parser.add_argument(''-o'', "--outputpath", help=''Directory where output needs to be stored (Default: '' + os.path.dirname(os.path.abspath(__file__)))
Necesito verificar las opciones -s
y -e
que la entrada del usuario está en el formato YYYY-MM-DD
. ¿Existe una opción en argparse que no sé de qué se trata?
Por la documentación :
El argumento de palabra clave de
type
deadd_argument()
permite realizar cualquier comprobación de tipo necesaria y conversiones detype=
...type=
puede tomar cualquier elemento invocable que tome un argumento de cadena única y devuelva el valor convertido
Podrías hacer algo como:
def valid_date(s):
try:
return datetime.strptime(s, "%Y-%m-%d")
except ValueError:
msg = "Not a valid date: ''{0}''.".format(s)
raise argparse.ArgumentTypeError(msg)
Luego usa eso como type
:
parser.add_argument("-s",
"--startdate",
help="The Start Date - format YYYY-MM-DD",
required=True,
type=valid_date)
Solo para agregar a la respuesta anterior, puede usar una función lambda si desea mantenerla en una sola línea. Por ejemplo:
parser.add_argument(''--date'', type=lambda d: datetime.strptime(d, ''%Y%m%d''))
Viejo hilo, pero la pregunta todavía era relevante para mí al menos!