我通过在命令后youtube-dl
放置在后台运行。&
问题是它不在乎我把它放在后台并在终端中保持打印信息。
它不仅拒绝以Ctrl+C或Ctrl+停止Z,而且除了显示这些消息之外什么都不做。为了阻止它,我必须关闭终端。
这正是发生的事情:
mohamed@Smithers:~$ clear
mohamed@Smithers:~$ youtube-dl https://www.youtube.com/watch?v=LMQsYSuw8hw &
[1] 2028
mohamed@Smithers:~$ [youtube] LMQsYSuw8hw: Downloading webpage
[youtube] LMQsYSuw8hw: Downloading video info webpage
[youtube] LMQsYSuw8hw: Extracting video information
[youtube] LMQsYSuw8hw: Downloading MPD manifest
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] Resuming download at byte 11440128
[download] Destination: I Was On Japanese TV... and I F#%KING HATED IT.-LMQsYSuw8hw.f137.mp4
[download] 4.8% of 231.85MiB at 199.01KiB/s ETA 18:56^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
[download] 4.8% of 231.85MiB at 136.95KiB/s ETA 27:30^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
[download] 5.0% of 231.85MiB at 127.41KiB/s ETA 29:31^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
mohamed@Smithers:~$ ^C
[download] 5.0% of 231.85MiB at 111.38KiB/s ETA 33:44^C
mohamed@Smithers:~$ ^C
[download] 5.0% of 231.85MiB at 111.21KiB/s ETA 33:47^C
mohamed@Smithers:~$ ^C
[download] 5.1% of 231.85MiB at 116.77KiB/s ETA 32:09^C
[download] 5.5% of 231.85MiB at 108.71KiB/s ETA 34:24^C
[download] 5.6% of 231.85MiB at 76.68KiB/s ETA 48:41
youtube-dl
正在后台运行,但它仍在向您的终端发送输出,并产生相当多的输出以通知您其进度。有很多方法可以改变这一点,但您可能想要减少youtube-dl
输出,或者将其输出发送到文件(或完全丢弃)而不是出现在终端中。方式 1:运行
youtube-dl -q
以抑制状态消息。如果您不想看到进度消息,您可以将
-q
标志(或--quiet
,它做同样的事情)传递给youtube-dl
命令:当然,您必须用您要下载的任何内容替换该 URL。可能仍会打印一些消息,包括错误和警告。但很可能你想看到那些。
如果您不想
youtube-dl
产生任何警告,则可以youtube-dl
使用该--no-warnings
标志运行。不过,我不建议这样做,除非你确定这是你想要的。要了解更多关于接受的命令行选项
youtube-dl
,您可以在线运行man youtube-dl
或阅读其手册页。方式2:将标准输出重定向
youtube-dl
到文件。要将输出附加到
dl.log
当前目录中(您可以将其命名为您想要的名称,如果它不存在,它将被创建),运行:如果要覆盖
dl.log
而不是将文本附加到末尾,请使用>
而不是>>
:然后将正常输出重定向到
dl.log
(或您告诉它使用的任何文件)。但是,错误输出仍将显示在您的终端上。例如,当我运行该命令时,我的终端上打印了一个警告:其他所有内容都进入日志文件:
您可以随时查看输出
cat
(正如我在上面所做的那样),以检查进度。当您在没有 的情况下运行
youtube-dl
时-q
,它会产生主要用于终端的输出。此输出包括告诉终端删除先前进度消息的控制字符,以便可以用新的进度消息在视觉上替换它。某些查看文件的方式,例如cat dl.log
,不会显示“已擦除”消息或控制字符。但是,它们仍然是文件的一部分,您可以使用其他一些实用程序查看它们;例如,view dl.log
作品。方式2a:重定向输出以
/dev/null
摆脱它。如果您希望输出只是被丢弃而不是保存在实际文件中,那么您可以将其重定向到
/dev/null
:使用
/dev/null
,“覆盖” (>
) 或“追加” (>>
) 都没有关系。这通常是一种方便的技术,尽管对于
youtube-dl
. 如果您想抑制进度,则可以youtube-dl -q
改为运行。方式3:也重定向标准错误。
常规输出和错误输出是分开的。两者都生产是很常见的
youtube-dl
。上述方法仅重定向标准输出。您还可以重定向标准错误。重定向可以做很多事情,包括将两个输出流重定向到单独的文件。出于我们的目的,我将只展示如何将标准输出和标准错误发送到同一个文件:当我运行它时,我的外壳只显示
...并且常规输出和错误输出都出现在
dl.log
:上面使用的示例
&>>
,它附加到dl.log
. 要改写文件,请使用&>
(或>&
,也可以使用)而不是&>>
:方式 3a:将正常和错误输出都重定向到
/dev/null
.如果你真的想要,你可以将标准输出和标准错误都重定向到,
/dev/null
所以它们都被简单地丢弃了:不过,您可能希望看到实际的错误消息。如果它只是您不想要的状态消息和警告,那么您不需要任何重定向。在这种情况下,您可以
youtube-dl -q --no-warnings
如上所述使用。(见方式 1。)假设以利亚的回答没有任何建议有效或适用。
不知道为什么图书馆似乎不支持安静的选项
self.to_screen('由于 --no-playlist' % video_id 只下载视频 %s)
输出正如人们可能期望的那样运行......
这里的代码部分
in Lib\site-packages\youtube_dl\extractor\Common.py 是 self.to_screen 调用中 out 的罪魁祸首。
如果您在使用#'s 调用的任何下载器中省略 self.to_screen 调用 - 例如 site-packages\youtube_dl\extractor\youtube.py 这将永远省略各种输出。