将youtube_dl基本嵌入到Python 3.4脚本中的问题
我一直在修修补补,并在将其实现到我的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
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']))