Estoy realizando los ejercicios de Python de Google y necesito poder hacer esto desde la línea de comandos:
python babynames.py --summaryfile baby*.html
Donde python
es el shell de Python, babynames.py
es el progtwig de Python, --summaryfile
es un argumento que debe interpretar mi progtwig de babynames
, y baby*.html
es la lista de archivos que coinciden con esa expresión. Sin embargo, no funciona y no estoy seguro de si el problema es el shell de comandos de Windows o Python. La expresión baby*.html
no se está expandiendo a la lista completa de archivos, sino que se pasa estrictamente como una cadena. ¿Se pueden pasar múltiples archivos a un progtwig de Python de esa manera?
El intérprete de comandos de Windows no expande los comodines como lo hacen los shells de UNIX antes de pasarlos al progtwig o script ejecutado.
python.exe -c "import sys; print sys.argv[1:]" *.txt
Resultado:
['*.txt']
Solución: utilizar el módulo glob
.
from glob import glob from sys import argv for filename in glob(argv[1]): print filename
Multiplataforma:
import glob if '*' in sys.argv[-1]: sys.argv[-1:] = glob.glob(sys.argv[-1]) continue...
Utilizando argparse:
import argparse parser=argparse.ArgumentParser() parser.add_argument(dest='wildcard',nargs='+') print(parser.parse_args().wildcard)
Puedes hacerlo desde shells similares a UNIX, desde el principio en el que escribiste. En mi caso, Git Bash hizo el trabajo: acepta asteriscos como entrada y los procesa correctamente.