我目前正在使用 argparse,如下所示:
import argparse
from argparse import ArgumentParser
parser = ArgumentParser(description="ikjMatrix multiplication")
parser.add_argument("-i", dest="filename", required=True,
help="input file with two matrices", metavar="FILE")
args = parser.parse_args()
A, B = read(args.filename)
C = ikjMatrixProduct(A, B)
printMatrix(C)
现在我想指出的是,-i
应该是一个可读的文件。我怎样才能做到这一点?
我尝试过添加type=open
, type=argparse.FileType('r')
他们工作了,但如果文件无效,我想收到一条错误消息。我怎样才能做到这一点?
实际上这很容易。您只需要编写一个函数来检查文件是否有效,否则写入错误。将该函数与type
选项。请注意,您可以通过子类化来获得更多创意并创建自定义操作argparse.Action
,但我认为这里没有必要。在我的示例中,我返回一个打开的文件句柄(见下文):
#!/usr/bin/env python
from argparse import ArgumentParser
import os.path
def is_valid_file(parser, arg):
if not os.path.exists(arg):
parser.error("The file %s does not exist!" % arg)
else:
return open(arg, 'r') # return an open file handle
parser = ArgumentParser(description="ikjMatrix multiplication")
parser.add_argument("-i", dest="filename", required=True,
help="input file with two matrices", metavar="FILE",
type=lambda x: is_valid_file(parser, x))
args = parser.parse_args()
A, B = read(args.filename)
C = ikjMatrixProduct(A, B)
printMatrix(C)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)