将youtube_dl基本嵌入到Python 3.4脚本中的问题

将youtube_dl基本嵌入到Python 3.4脚本中的问题,python,python-3.x,youtube,youtube-dl,Python,Python 3.x,Youtube,Youtube Dl,我一直在修修补补,并在将其实现到我的Python 3.4脚本中时遇到问题 我只是尝试创建一个存储输出的变量(通过几个选项进行调整) 但是,我似乎不知道如何将选项添加到函数中,而且无论我做什么,输出似乎都只会打印出来(而不是存储在变量中) 这是我目前的代码: class MyLogger(object): def debug(self, msg): pass def warning(self, msg): pass def error(s

我一直在修修补补,并在将其实现到我的Python 3.4脚本中时遇到问题

我只是尝试创建一个存储输出的变量(通过几个选项进行调整)

但是,我似乎不知道如何将选项添加到函数中,而且无论我做什么,输出似乎都只会打印出来(而不是存储在变量中)

这是我目前的代码:

class MyLogger(object):
    def debug(self, msg):
        pass

    def warning(self, msg):
        pass

    def error(self, msg):
        print(msg)

ydl_opts = {
'logger': MyLogger(),
}

with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])
目前只下载了一段测试视频。以下是解释嵌入youtube\u dl的GitHub链接:

下面是我要做的工作的伪代码:

class MyLogger(object):
    def debug(self, msg):
        pass

    def warning(self, msg):
        pass

    def error(self, msg):
        print(msg)

ydl_opts = {
'logger': MyLogger(),
'InfoExtractors':[{'simulate','forceduration'}]
}

with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    duration = ydl.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])
print('The duration is {0}'.format(duration))

有人有什么建议或想法吗?我在这个问题上停留的时间比我愿意承认的要长。

通过对
youtube\u dl
的源代码的简单浏览,看起来如果不修改
youtube\u dl
,您想要做的事情是不可能的。发件人:

正如您所看到的,它调用
self.to_screen
self.to_stdout
,其中包含所有不是返回代码的内容。您可能会修补其中一个函数来重定向输出,但我认为不这样做是不可能的

如果您确实想将
self.to_screen
补丁,您应该能够执行以下操作

警告:这可能会破坏一切

def patched_to_screen(self, message, skip_eol=False):
    return message


def patch_to_stdout(self, message, skip_eol=False, check_quiet=False):
    return message


ydl = YoutubeDL()
ydl.to_screen = patched_to_screen
tdl.to_stdout = patched_to_stdout

使用
extract\u info
方法,它将返回一个字典:


这看起来不像伪代码;它看起来像是一厢情愿的Python代码。
def patched_to_screen(self, message, skip_eol=False):
    return message


def patch_to_stdout(self, message, skip_eol=False, check_quiet=False):
    return message


ydl = YoutubeDL()
ydl.to_screen = patched_to_screen
tdl.to_stdout = patched_to_stdout
import youtube_dl

class MyLogger(object):
    def debug(self, msg):
        pass

    def warning(self, msg):
        pass

    def error(self, msg):
        print(msg)

ydl_opts = {
    'logger': MyLogger(),
}

with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    info = ydl.extract_info('http://www.youtube.com/watch?v=BaW_jenozKc', download=True)
print('The duration is {0}'.format(info['duration']))