【发布时间】:2018-11-22 06:01:11
【问题描述】:
我正在编写一个简单的脚本,用于解析存储在 AWS CloudWatch 上的 JSON 文件的内容。我在脚本中添加了一个参数解析器,它将接受用户输入,并允许用户将文件的输出打印到屏幕上(以预定的方式),或者允许他们将内容输出到本地 JSON 文件.这是让我难过的东西的sn-p:
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?到目前为止,搜索结果尚无定论。
提前致谢!
【问题讨论】:
-
choices的值可以是任何字符串列表。我建议使用os函数来获取有效路径列表,根据需要对其进行操作,添加“打印”,然后设置add_argument。另一种选择是接受任何字符串(没有选择),并在解析后进行测试。 -
在我看来,你不应该使用
choices选项。有一个功能可以检查路径是否有效(see here)。对我来说,你应该只检查你收到的标志的值。正如你应该总是做的那样。 -
如果列表很长,
choices将成为问题 - 帮助中的显示和错误消息变得混乱。