glob python возвращает только первый результат

Я действительно в тупике.

У меня есть простая оболочка python, которая выглядит примерно так:

import glob for found in glob.glob(filename): if not os.path.isdir(found): my_module.do_stuff(found) 

где filename был прочитан из sys.argv .

Когда я glob в интерактивной оболочке или hello world script, я получаю полный список файлов (в данном случае 5). Однако, когда я использую его в этом контексте, я получаю только первый (в алфавитном порядке).

Я проверил, поймав результат glob.glob в массиве и, конечно же, у него есть только len() из 1, даже если имя файла равно '*' .

Что я могу делать, что ломает glob ?

Полный файл кода, на всякий случай, если вы обнаружите мою версию:

 #! /usr/bin/python import pynet.quadrons as q import os, glob def print_usage(): print """ (blah blah big long string.) """ if __name__ == "__main__": import sys if len(sys.argv) < 2: print_usage() exit() filename = '' try: filename = sys.argv[1] except: print "error parsing arguments." print_usage() exit() for found in glob.glob(filename): if not os.path.isdir(found): q.load_and_analyse_file(found) 

2 Solutions collect form web for “glob python возвращает только первый результат”

Оболочка расширяет glob, прежде чем ваш скрипт Python увидит это. Поэтому ваш скрипт Python видит первое полное имя файла, которое соответствует glob в sys.argv[1] , передает его glob() , и, конечно, оно соответствует только одному файлу.

Либо укажите аргумент в оболочке с одинарными кавычками, чтобы оболочка не расширила его, либо просто разрешила оболочке выполнять расширение и повторять все элементы sys.argv (кроме первого).

Стоит отметить, что в Windows оболочка не делает глобусы, поэтому, если ваш скрипт должен работать на кросс-платформенном, вы должны sys.argv[1:] и погладить каждый элемент.

Отладка 101: print len(sys.argv[1:]), repr(sys.argv[1:])

Питание для одного или нескольких имен файлов и / или одного или нескольких шаблонов:

 for pattern in sys.argv[1:]: for filename in glob.glob(pattern): do_something_with(filename) 
  • Удаление / замена разделов многострочного кода на python
  • Mercurial Hook - изменить сообщение фиксации фиксации
  • Как удалить последние n символов из строки?
  • Удаление модулей python?
  • Suds + JIRA = SAXException
  • Выход выполнения команды Python
  • Python - параллельные команды
  • Изменение определения функции без назначения
  • Python - лучший язык программирования в мире.