强制参数成为有效路径

时间:2018-06-12 18:50:09

标签: python path argparse

我正在编写一个简单的脚本,用于解析存储在AWS CloudWatch上的JSON文件的内容。我已经在脚本中添加了一个接受用户输入的参数解析器,并允许用户将文件的输出打印到屏幕上(以预定的方式),或允许他们将内容输出到本地JSON文件。这是一个让我感到困惑的片段:

import argparse

parser = argparse.ArgumentParser(description="Process a log file")
parser.add_argument('-o', '--output', choices=[???, 'print'], 
                    default='print', help='Specify logfile output path or print to screen')
args = parser.parse_args()

我的问题源于parser.add_argument行,特别是choices参数。我想为此标志允许两个输入,即print或本地计算机上的某个有效路径。我希望当前标记为问号的选项是Python可识别的PATH。

有没有办法,使用argparse来指定一个标志的参数之一必须是PATH?到目前为止,搜索结果尚无定论。

提前致谢!

2 个答案:

答案 0 :(得分:5)

使用type keyword argumentadd_argument,而不是choices。正如文档所说:

  

add_argument()的type关键字参数允许任何必要的参数   要执行的类型检查和类型转换。

def myfiletype(arg):
    if arg == 'print' or os.path.isdir(arg):
        return arg
    else:
        raise ValueError('Invalid path specification')


parser.add_argument('-o', '--output', type=myfiletype, 
                    default='print', 
                    help='Specify logfile output path or print to screen')

答案 1 :(得分:0)

定义自定义type(如https://stackoverflow.com/a/14117511/1093967中所示),其中值可以是有效路径或'print'choices不是正确的选择。