2014-12-15 2 views
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> 

Что я делаю неправильно?

ответ

4

заменить это:

print(args.filename.read) 

к:

print(args.filename.read()) 

Прочитайте о классе и объект здесь: Class and Object

+0

Это решается, спасибо! Интересно, почему я не получил ошибку, используя 'read' ... – Zubo

+0

@ Zubo Это связано с тем, что функции python являются объектами первого класса. Набрав filename.read, вы получаете объект. Символы '()' «вызывают» объект. Примечание: 'f = foo(); f.a = 4; f.a(); TypeError: объект 'int' не является вызываемым' –

Смежные вопросы