栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

argparse的目录路径类型

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

argparse的目录路径类型

您可以创建自定义操作而不是类型:

import argparseimport osimport tempfileimport shutilimport atexitclass readable_dir(argparse.Action):    def __call__(self, parser, namespace, values, option_string=None):        prospective_dir=values        if not os.path.isdir(prospective_dir): raise argparse.ArgumentTypeError("readable_dir:{0} is not a valid path".format(prospective_dir))        if os.access(prospective_dir, os.R_OK): setattr(namespace,self.dest,prospective_dir)        else: raise argparse.ArgumentTypeError("readable_dir:{0} is not a readable dir".format(prospective_dir))ldir = tempfile.mkdtemp()atexit.register(lambda dir=ldir: shutil.rmtree(ldir))parser = argparse.ArgumentParser(description='test', fromfile_prefix_chars="@")parser.add_argument('-l', '--launch_directory', action=readable_dir, default=ldir)args = parser.parse_args()print (args)

但这对我来说似乎有点麻烦-如果没有给出目录,它将传递一个不可读的目录,这似乎使检查目录是否首先可访问的目的无法实现。

请注意,正如评论中指出的那样,它可能

raise argparse.ArgumentError(self, ...)
比更好
argparse.ArgumentTypeError

编辑

据我所知,没有办法验证默认参数。我想

argparse
开发人员只是假设,如果您提供默认值,那么它应该是有效的。最快,最简单的方法是在解析参数之后立即对参数进行验证。看起来,您只是在尝试获取一个临时目录来执行一些工作。如果是这样,您可以使用该
tempfile
模块来获取一个新目录以供使用。我在上面更新了我的答案以反映这一点。我创建一个临时目录,将其用作默认参数(
tempfile
已经保证它创建的目录是可写的),然后我将其注册为在程序退出时将其删除。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660830.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号