2017-02-11 9 views
2

Я использую Click, чтобы передать аргумент, являющийся именем файла. Это имя файла должно использоваться ConfigParser.SafeConfigParser.read() для чтения ini-файла. К сожалению, щелчок проходит в файловом объекте, который read() не может обрабатывать.SafeConfigParser.read() с файловым объектом вместо строки

Есть ли способ разрешить read() взять файл-объект или его можно настроить, чтобы не открывать файл (но все же делать проверки)?

ответ

0

Примечание: Я узнал, что ConfigParser имеет способ для чтения файлов. Он называется readfp(self, fp, filename=None). Это, возможно, лучший ответ. Я оставлю свой старый ответ ниже, если кто-то должен быть заинтересован в этом решении.

Вы можете получить имя файла из дескриптора файла, используя свойство name. Это можно передать в ConfigParser.SafeConfigParser.read().

Небольшой пример просто распечатав файла:

import click 

@click.command() 
@click.argument('filehandle', type=click.File('rb')) 
def print_filename(filehandle): 
    print "File name: %s" % filehandle.name 

if __name__=="__main__": 
    print_filename() 
+0

Я надеялся на решение, для которого файл не нужно открывать в два раза. – orange

+0

Я только что увидел, что 'ConfigParser' имеет метод для чтения дескрипторов файлов. Он называется 'readfp (self, fp, filename = None)'. Он не открывает файл, поэтому он должен работать. –

 Смежные вопросы

  • Нет связанных вопросов^_^