'builtin_function_or_method'列出

时间:2017-08-22 15:38:29

标签: python python-2.7 python-3.x

我理解Python是一种动态语言,但下面的代码困扰着我。

我有以下简单的程序,它有一些辅助函数来包装命令执行。

EventLoaderToVerticaHelper是一个带有两个方法的辅助类,所以当我调用“get_filenames_from_hdfs_with_filter”时,它应该抛出一个错误或返回一个String列表。

class EventLoaderToVerticaHelper:
    def __init__(self):
        pass

    @staticmethod
    def execute_command(cmd):
        p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        error_lines = p.stderr.readlines()
        if len(error_lines) > 0:
            raise error_lines
        return p.stdout.readlines

    @staticmethod
    def get_filenames_from_hdfs_with_filter(folder, filetype):
        cmd = "hdfs dfs -ls {0}/*.{1} |  awk '{print $8}'".replace("{0}", folder).replace("{1}", filetype)
        return EventLoaderToVerticaHelper.execute_command(cmd) 

以下代码使用上面的帮助器

from src.EventLoaderToVerticaHelper import EventLoaderToVerticaHelper
if __name__ == '__main__':
     filelist = EventLoaderToVerticaHelper.get_filenames_from_hdfs_with_filter("/user/cloudera/testfiles", "csv")
     for s in filelist:
        print s

当我运行上述程序时,我得到以下错误。如果List [Str]

,我确定返回类型
Traceback (most recent call last):
  File "/home/cloudera/PycharmProjects/vertical-event-loader/src/EventLoaderToVertica.py", line 29, in <module>
for s in filelist:
TypeError: 'builtin_function_or_method' object is not iterable

我知道我希望它表现出某种类型的语言...我希望方法返回List [Str],当有异常时我想终止该程序。

我怎样才能做到这一点,我尝试了返回类型和其他东西,但没有运气。

1 个答案:

答案 0 :(得分:4)

return p.stdout.readlines

应该是

return p.stdout.readlines()

请注意,当您从stderr读取时,您确实在上面两行正确调用了readlines。