【发布时间】:2012-07-10 01:30:15
【问题描述】:
我的 python 脚本需要从命令行传递的目录中读取文件。我已经定义了一个 readable_dir 类型,如下所示与 argparse 一起使用,以验证在命令行上传递的目录是否存在且可读。 此外,还为目录参数指定了默认值(以下示例中的 /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()
【问题讨论】:
-
有用的代码示例。提高应该
raise argparse.ArgumentTypeError,否则,我正在挖掘 readable_dir 类型。