我正在用argparse编写一个工具,它将从命令行获取源目录的列表并处理其中的所有文件。最后,当调用parse_args时,将扫描每个目录以查找要处理的文件,并将文件列表放入返回名称空间的files
属性中。在
parser = argparse.ArgumentParser()
parser.add_argument('-s', '--sources'
, dest = 'files'
, default = 'results/e1653a3'
, nargs = '*'
, metavar = 'SOURCE'
, action = ConcatAction
, type = FileList
)
args = parser.parse_args()
在这里,FileList
函数接受一个目录名并返回一个文件列表。ConcatAction
是一个将列表列表展平的操作。结果是我可以像tool.py -s dir1 dir2
一样调用我的工具,args.files
包含两个目录中的所有文件。在
默认情况下,我希望它扫描多个目录;但是,将列表传递给默认值:
^{pr2}$避开argparse的类型转换系统,因此FileList()
永远不会被调用,args.files
包含列表['dir1', 'dir2']
,而不是扫描的文件。如果我尝试
, default = 'dir1 dir2'
然后对FileList('dir1 dir2')
进行一次调用,而不是两次调用FileList('dir1')
FileList('dir2')
我知道我可以只处理argparse之外的源目录来获得我想要的功能,但是有没有办法让argparse在默认值列表上执行类型转换呢?在
正如您所注意到的,字符串默认值通过type函数传递,而所有其他默认值都被简单地分配给属性(未更改)。我认为解决方案是构建您希望在默认情况下在命名空间中看到的确切文件列表。在
我会让你担心的是如何运用这个平缓的动作。在
或者可以用所需的文件列表初始化命名空间。在这种情况下,
^{pr2}$default
被忽略。在相关问题 更多 >
编程相关推荐