Передача нескольких файлов со звездочкой в оболочку python в Windows

Я выполняю упражнения Google Python, и мне нужно сделать это из командной строки:

python babynames.py --summaryfile baby*.html

Где python - оболочка Python, babynames.py - это программа Python, --summaryfile - это аргумент, который будет интерпретироваться моей программой babynames, а baby*.html - список файлов, соответствующих этому выражению. Однако это не работает, и я не уверен, является ли проблема командной оболочкой Windows или Python. Выражение baby*.html не распространяется на полный список файлов, вместо этого оно передается строго как строка. Можно ли передать несколько файлов в программу Python таким образом?

Ответ 1

Командный интерпретатор Windows не расширяет подстановочные знаки, как это делают оболочки UNIX, прежде чем передавать их в исполняемую программу или script.

python.exe -c "import sys; print sys.argv[1:]" *.txt

Результат:

['*.txt']

Решение: используйте модуль glob.

from glob import glob
from sys import argv

for filename in glob(argv[1]):
    print filename

Ответ 2

Кроссплатформенность:

import glob
if '*' in sys.argv[-1]:
     sys.argv[-1:] = glob.glob(sys.argv[-1])
continue...

Ответ 3

Использование argparse:

import argparse
parser=argparse.ArgumentParser()
parser.add_argument(dest='wildcard',nargs='+')

print(parser.parse_args().wildcard)

Ответ 4

Вы можете сделать это из UNIX-подобных оболочек, прямо в том, что вы писали. В моем случае Git Bash выполнил эту работу - он принимает звездочки в качестве входных данных и обрабатывает их правильно.