Python 要列出的“内置函数”或“方法”

Python 要列出的“内置函数”或“方法”,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我知道Python是一种动态语言,但下面的代码让我很困扰 我有下面这个简单的程序,它有一些帮助函数来包装命令的执行 EventLoaderToverticHelper是一个具有两个方法的帮助器类,因此当我使用\u过滤器从\u hdfs\u调用get\u filenames\u时,它应该抛出一个错误或返回一个字符串列表 class EventLoaderToVerticaHelper: def __init__(self): pass @staticmethod

我知道Python是一种动态语言,但下面的代码让我很困扰

我有下面这个简单的程序,它有一些帮助函数来包装命令的执行

EventLoaderToverticHelper是一个具有两个方法的帮助器类,因此当我使用\u过滤器从\u hdfs\u调用get\u filenames\u时,它应该抛出一个错误或返回一个字符串列表

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
当我运行上述程序时,我得到以下错误。我确信返回类型if 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],当出现异常时,我想终止程序

我怎么能做到这一点,我尝试了返回类型和其他事情,但没有运气

return p.stdout.readlines
应该是

return p.stdout.readlines()
注意,当您从stderr读取时,您确实正确地调用了上面两行中的readlines

应该是

return p.stdout.readlines()

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

您返回的是readlines return p.stdout.readlines方法,您没有调用它。Jim Fasarakis Hilliard您首先回答了问题,如何将您的注释标记为答案?另外,您希望引发错误行做什么?要引发的第一个参数应该是异常对象。检查标准错误的输出不是确定命令是否成功的好方法。命令可以在不写入标准错误的情况下失败,并且可以在成功时写入诊断信息。没有状态和两个静态方法的类不应该是类-它应该是两个模块级函数…您正在返回方法readlines return p.stdout.readlines,吉姆·法萨拉基斯·希利亚德:你首先回答了这个问题,如何将你的评论标记为答案?另外,你希望引起什么样的错误?要引发的第一个参数应该是异常对象。检查标准错误的输出不是确定命令是否成功的好方法。命令可以在不写入标准错误的情况下失败,并且可以在成功时写入诊断信息。没有状态和两个静态方法的类不应该是一个类-它应该是两个模块级函数。。。