Digamos que tengo un script que funciona en un archivo. Toma el nombre de este archivo en la línea de comando, pero si no se proporciona, se establece de manera predeterminada en un nombre de archivo conocido (content.txt
, por ejemplo). Con pitón de argparse
, utilizo el siguiente:Especificando nombres de archivo predeterminados con argparse, pero no abriéndolos en --help?
parser = argparse.ArgumentParser(description='my illustrative example')
parser.add_argument('--content', metavar='file',
default='content.txt', type=argparse.FileType('r'),
help='file to process (defaults to content.txt)')
args = parser.parse_args()
# do some work on args.content, which is a file-like object
Esto funciona muy bien. El único problema es que si ejecuto python myscript --help
, obtengo un ArgumentError
si el archivo no está allí (lo cual creo que tiene sentido), y el texto de ayuda no se muestra. Prefiero que no intente abrir el archivo si el usuario simplemente quiere --help
. ¿Hay alguna manera de hacer esto? Sé que podría convertir el argumento en una cadena y tener la precaución de abrir el archivo yo mismo más tarde (y he estado haciendo eso), pero sería conveniente tener argparse
ocupérselo.
Bueno, parece que vas a tener que tomar una decisión aquí. Puede hacer que el archivo predeterminado esté disponible (en virtud de que sea un "valor predeterminado") o simplemente abrir el archivo usted mismo, tal como se lo sugirió. Alternativamente, parece que puede usar stdin como predeterminado, sin embargo, no podrá especificar un nombre de archivo predeterminado, lo que podría no ser una mala opción si no desea llenar ese archivo. –