2
我使用Click来传入一个文件名的参数。这个文件名是为了被ConfigParser.SafeConfigParser.read()
用来读取ini文件。不幸的是,点击传入文件对象,read()
无法处理。带有文件对象而不是字符串的SafeConfigParser.read()
有没有办法允许read()
采取文件对象或可以点击被配置为不打开文件(但仍然执行检查)?
我使用Click来传入一个文件名的参数。这个文件名是为了被ConfigParser.SafeConfigParser.read()
用来读取ini文件。不幸的是,点击传入文件对象,read()
无法处理。带有文件对象而不是字符串的SafeConfigParser.read()
有没有办法允许read()
采取文件对象或可以点击被配置为不打开文件(但仍然执行检查)?
注意:我发现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()
我希望针对该文件并不需要打开两次的解决方案。 – orange
我刚才看到'ConfigParser'有一个专门读取文件句柄的方法。它被称为'readfp(self,fp,filename = None)'。它不打开文件,所以它应该工作。 –