【发布时间】:2016-10-23 04:32:24
【问题描述】:
假设我有一个对文件执行某些操作的脚本。它在命令行上使用此文件的名称,但如果未提供,则默认为已知文件名(例如content.txt)。使用 python 的argparse,我使用以下内容:
parser = argparse.ArgumentParser(description='my illustrative example')
parser.add_argument('--content', metavar='file',
default='content.txt', type=argparse.FileType('r'),
help='file to process (defaults to content.txt)')
args = parser.parse_args()
# do some work on args.content, which is a file-like object
这很好用。唯一的问题是,如果我运行python myscript --help,如果文件不存在,我会得到ArgumentError(我想这是有道理的),并且没有显示帮助文本。如果用户只想要--help,我宁愿它不要尝试打开文件。有没有办法做到这一点?我知道我可以将参数设置为字符串,然后自己处理打开文件(我一直在这样做),但让 argparse 处理它会很方便。
【问题讨论】:
-
好吧,看来您必须在这里做出决定。您可以使默认文件可用(因为它是“默认”),也可以按照您自己的建议自行打开文件。或者,您似乎可以使用标准输入作为默认值,但是您将无法指定默认文件名,如果您不想填充该文件,这可能不是一个坏选择。
-
FWIW 这显然已在足够新的 Python 版本中修复,您提供的 sn-p 工作正常。