0
Я следую рекомендациям: File as command line argument for argparse - error message if argument is not valid для печати содержимого файла. Вот MWE:python: с помощью дескриптора файла для печати содержимого файла
import argparse
import os
def is_valid_file(parser, arg):
"""
:rtype : open file handle
"""
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 = argparse.ArgumentParser(description='do shit')
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()
print(args.filename.read)
Однако я получаю это вместо того, чтобы содержимое файла:
<built-in method read of _io.TextIOWrapper object at 0x7f1988b3bb40>
Что я делаю неправильно?
Это решается, спасибо! Интересно, почему я не получил ошибку, используя 'read' ... – Zubo
@ Zubo Это связано с тем, что функции python являются объектами первого класса. Набрав filename.read, вы получаете объект. Символы '()' «вызывают» объект. Примечание: 'f = foo(); f.a = 4; f.a(); TypeError: объект 'int' не является вызываемым' –