argparse的目录路径类型

argparse的目录路径类型,第1张

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
已经保证它创建的目录是可写的),然后我将其注册为在程序退出时将其删除。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5662787.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存