相关疑难解决方法(0)

argparse的目录路径类型

我的python脚本需要从命令行传递的目录中读取文件.我已经定义了一个如下所示的readable_dir类型,用于与argparse一起验证在命令行上传递的目录是否存在且可读.此外,还为directory参数指定了默认值(下例中的/ tmp/non_existent_dir).这里的问题是argparse在默认值上调用readable_dir(),即使在命令行中显式传入目录参数的情况下也是如此.这会导致脚本丢失,因为在命令行上显式传入目录的上下文中不存在缺省路径/ tmp/non_existent_dir.我可以通过不指定默认值并强制使用此参数,或者通过将验证推迟到脚本中的后期来解决这个问题,但这是一个更优雅的解决方案,任何人都知道吗?

#!/usr/bin/python
import argparse
import os

def readable_dir(prospective_dir):
  if not os.path.isdir(prospective_dir):
    raise Exception("readable_dir:{0} is not a valid path".format(prospective_dir))
  if os.access(prospective_dir, os.R_OK):
    return prospective_dir
  else:
    raise Exception("readable_dir:{0} is not a readable dir".format(prospective_dir))

parser = argparse.ArgumentParser(description='test', fromfile_prefix_chars="@")
parser.add_argument('-l', '--launch_directory', type=readable_dir, default='/tmp/non_existent_dir')
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

python argparse

55
推荐指数
3
解决办法
4万
查看次数

标签 统计

argparse ×1

python ×1