假设我有一个对文件执行一些操作的脚本。它在命令行上获取此文件的名称,但如果未提供,则默认为已知文件名(content.txt
, 说)。与蟒蛇的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
搞定此事。
你可以子类化argparse.FileType
:
import argparse
import warnings
class ForgivingFileType(argparse.FileType):
def __call__(self, string):
try:
super(ForgivingFileType,self).__call__(string)
except IOError as err:
warnings.warn(err)
parser = argparse.ArgumentParser(description='my illustrative example')
parser.add_argument('--content', metavar='file',
default='content.txt', type=ForgivingFileType('r'),
help='file to process (defaults to content.txt)')
args = parser.parse_args()
这无需触及私有方法即可工作,例如ArgumentParser._parse_known_args
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)